若是處理vim產生的swp文件 以及diff功能的使用

vi下刪除swp文件

使用vi編輯器編輯文件時,常常會因爲非正常退出而產生一個swp文件,之後每次進入時都會提示,很是麻煩。現將網上搜集的解決方法陳列於此:html

swp文件產生緣由分爲:1.當你用多個程序編輯同一個文件時。
                 2.很是規退出時。
一般最後的少許改動沒法恢復. Vim會在你連續4秒不鍵入內容時跟磁盤同步一次, 或者是連續鍵入了200個字符以後. 這能夠經過´updatetime´和´updatecount´兩個選項來控制. 因此係統若是在有所改動以後但Vim尚未同步時發生了宕機, 那這一部份內容就沒法恢復了。
第一種狀況的話,爲了不同一個文件產生兩個不一樣的版本 (vim中的原話),仍是建議選擇readonly爲好
第二種狀況的話,你能夠 用vim -r filename恢復,而後再把swp文件刪除(rm .filename.swp)。
進一步學習: swap-filej 關於交換文件的位置和命名
       :preservej 手工刷新交換文件
       :swapnamej 查看原文件及其交換文件的名字
      ´updatecount´ 連續擊鍵多少次後作一次同步
      ´updatetime´ 多長時間以後作一次同步
      ´swapsync´ 同步交換文件時是否同時作一次磁盤同步
      ´directory´ 列出存放交換文件的目錄
      ´maxmem´ 還沒有寫入交換文件的內容所受的內存限制
      ´maxmemtot´ 同上, 可是針對全部文件

 

 

 

* 11.1 *  基本恢復

在大多數狀況下,恢復一個文件至關簡單。假設你知道正在編輯的是哪一個文件(而且硬盤
還能用)。能夠用 "-r" 選項啓動 Vim:

        vim -r help.txt

Vim 會讀取交換文件(用於保存你的編輯數據的文件)而且提取原文的編輯碎片。若是一
切順利,你會看到以下文字 (固然了,文件名會不同):

        Using swap file ".help.txt.swp"
        Original file "~/vim/runtime/doc/help.txt"
        Recovery completed. You should check if everything is OK.
        (You might want to write out this file under another name
        and run diff with the original file to check for changes)
        Delete the .swp file afterwards.

        (譯者注:中文狀況下是:
        使用交換文件 ".help.txt.swp"
        原文件 "~/vim/runtime/doc/help.txt"
        恢復完成. 請肯定一切正常.
        (你可能想要把這個文件另存爲別的文件名,
        再執行 diff 與原文件比較以檢查是否有改變)
        以後能夠刪除交換文件。
        )

爲了安全起見,能夠用另外一個文件名保存這個文件:

        :write help.txt.recovered

能夠把這個文件與原文件做一下比較,看看恢復的效果如何。這方面 Vimdiff 能夠幫很大
的忙
 
 
如何使用vim的 diff
用 vimdiff 顯示區別

有一種特殊的啓動 Vim 的方法能夠用來顯示兩個文件的區別。讓咱們打開一個 "main.c"
並插入一些字符。在設置了 'backup' 選項的狀況下保存這個文件,以便產生 "main.c~"
備份文件。
    在命令行中輸入以下命令:(不是在Vim中)

        vimdiff main.c~ main.c

Vim 會用垂直分割的方式打開兩個文件。你只能看到你修改過的地方和上下幾行的地方。

         VV                   VV
        +-----------------------------------------+
        |+ +--123 lines: /* a|+ +--123 lines: /* a|  <- 摺疊
        |  text              |  text              |
        |  text              |  text              |
        |  text              |  text              |
        |  text              |  changed text      |  <- 修改過的行
        |  text              |  text              |
        |  text              |  ------------------|  <- 刪除的行
        |  text              |  text              |
        |  text              |  text              |
        |  text              |  text              |
        |+ +--432 lines: text|+ +--432 lines: text|  <- 摺疊
        |  ~                 |  ~                 |
        |  ~                 |  ~                 |
        |main.c~==============main.c==============|
        |                                         |
        +-----------------------------------------+

(這幅圖沒有顯示出加亮效果,可使用 vimdiff 命令看到更好的效果)

    那些沒有修改的行會被摺疊成一行,這稱爲 "關閉的摺疊"(closed fold)。上圖
中由 "<- 折起" 標記的行就是一個用一行表示123行的摺疊。這些行在兩個文件中徹底
相同。
    標記爲 "<- 修改過的行" 被高亮顯示,而增長的行被用另外一種顏色表示。這能夠
很清楚地表示出兩個文件間的不一樣。
    被刪除的行在 main.c 窗口中用 "---" 顯示,如圖中用 "<- 刪除的行" 標記的行。
這些字符並非真的存在。它們只是用於填充 main.c,以便與另外一個窗口對齊。


折 疊 欄

每一個窗口在左邊都有一個顏色略有不一樣的顯示欄,圖中標識爲 "VV"。你會發現每一個摺疊
在那個位置都有一個加號。把鼠標移到那裏並按左鍵能夠打開那個折起,從而讓你看到
裏面的內容。
    對於打開的摺疊,摺疊欄上會出現一個減號。若是你單擊那個減號,摺疊會被從新關
閉。
    固然,這隻能在你有鼠標的狀況下使用。若是你沒有,能夠用 "zo" 打開一個摺疊
關閉使用 "zc"。


用 Vim 作 比 較

啓動比較模式的另外一種方法是從 Vim 內部開始:編輯 "main.c" 文件,而後分割窗口
顯示區別:

        :edit main.c
        :vertical diffsplit main.c

":vertical" 命令使窗口用垂直的方式分割。若是你不寫這個命令,結果會變成水平分
割。

若是你有一個當前文件的補丁或者 diff 文件,你能夠有第三種方法啓動比較模式:
先編輯這個文件,而後告訴 Vim 補丁文件的名稱:

        :edit main.c
        :vertical diffpatch main.c diff

警告:補丁文件中必須僅包括爲一個目標文件所作的補丁,不然你可能會獲得一大堆錯
誤信息。還可能有些你沒打算打補丁的文件被打了補丁。
    補丁功能只改變你內存中的文件,不會修改你硬盤上的文件(除非你決定寫入改動)。


滾 屏 綁 定

當文件中有不少改動時,你能夠用一般的方式滾動屏幕。Vim 會盡量保持兩個文件對
齊,以便你能夠並排看到文件的區別

    若是暫時想關閉這個特性,使用以下命令:

        :set noscrollbind


跳 轉 到 修 改 的 地 方

若是你經過某種方法取消了摺疊功能,可能很難找到有改動的地方。使用以下命令能夠跳
轉到下一個修改點:

       ]c

反向跳轉爲:

        [c

加上一個個數前綴能夠跳得更遠


消 除 差 異

你能夠把文本從一個窗口移到另外一個,並以此來消除差別,或者爲其中一個文件中增長
幾行。Vim 有時可能沒法及時更新高亮顯示。要修正這種問題,使用以下命令:

        :diffupdate

要消除差別,你能夠把一個高亮顯示的塊從一個窗口移動到另外一個窗口。以上面的
"main.c" 和 "main.c~" 爲例,把光標移到左邊的窗口,在另外一個窗口中被刪除的行
的位置,執行以下命令:

        :dp

這將把文字從左邊拷到右邊,從而消除兩邊的差別。"dp" 表明 "diff put"。
    你也能夠反過來作:把光標移到右邊的窗口,移到被 "改動" 了的行上,而後執行
以下命令:

        :do

把文本從左邊拷到右邊,從而消除差別。因爲兩個文件已經沒有區別了,Vim 會把全部
文字所有摺疊起來。"do" 表明 "diff obtain"。原本用 "dg" (diff get) 會更好。但是
它已經有另外的意思了 ("dgg" 刪除從光標爲止到首行的全部文本 )。

要了解更多的比較模式的內容,參見 |vimdiff| 。
相關文章
相關標籤/搜索