不管你有多少檔案要編輯,你都可以在Vim在處理它們。可以定義一個要編輯的檔案清單, 從一個檔案轉到另一個檔案, 也可以在不同檔案之間複製粘貼。
a、編輯另一個檔案
b、檔案清單
c、切換到另一檔案
d、備份
e、在檔案間複製粘貼
f、 查看檔案
g、變更檔名
編輯另一個檔案:
目前為止我們使用Vim的方式還是為每一個要編輯的檔案運行一次Vim。 這是最簡單的用法。
:edit foo.txt
可以在當前Vim中開始編輯另一個檔案。 當然你可以用任何檔案名稱來替代"foo.txt"。 Vim會關閉當前正在編輯的檔案開啟指定的新檔案進行編輯,如果當前檔案還有未存檔的內容, Vim會顯示如下的錯誤訊息同時也不會開啟另一個檔案:
E37: No write since last change (use ! to override)
此時,你可以有幾種選擇,你可以儲存該檔案:
:write
或者你可以強制Vim丟棄當前未儲存的修改並開始編輯新的檔案,使用強制執行修飾符:
:edit ! foo.txt
如果你想編輯另一個檔案, 但又不想儲存當前檔案中的改動, 你可以使它變為一個隱藏的緩衝區:
:hide edit foo.txt
檔案清單:
你可以在啟動Vim時就指定要編輯多個檔案, 如:
vim one.c two.c three.c
該命令啟動Vim並告訴它你要編輯3個檔案,Vim將在啟動後只顯示第一個檔案。完成該檔案的編輯後, 可以以命令:
:next
開始下一個檔案的編輯,如果你的當前檔案中有未存檔的內容, 你會象前面一樣得到一個錯誤訊息,“:next"命令也不會繼續, 這與前面提到的":edit"命令一樣, 要放棄這些改動,用:
:next!
但多數情況下人們還是要儲存工作成果並繼續下一個檔案的編輯.有一個命令合并了這個過程:
:wnext
這個命令完成以下兩個單獨命令的工作:
:write
:next
當前在編輯哪個檔案?
可以通過查看視窗的標題條得知你當前正在編輯的檔案名稱,應該也會同時顯示出象"(2 of 3)"這樣的資訊。這意味著你正是編輯一個由3個
檔案組成的檔案清單中的第2個。
如果你想查看整個列表中就有哪些檔案,使用命令:
:args
這是"arguments"的簡寫形式, 輸出結果形如:
one.c [two.c] three.c
這就是你啟動Vim時指定的要編輯的檔案清單,你當前正在編輯的那一個檔案將會以方括弧括起來。
移到另一個檔案:
要回到前一個檔案:
:previous
就跟":next"命令一樣, 不過它是朝向另一個檔案。同樣有一個對應的捷徑命令:
:wprevious
要移到最後一個檔案:
:last
到第一個:
:first
不過沒有":wlast"或者":wfirst"這樣的命令。
你也可以在":next"和":previous"命令前面使用一個命令計數, 要向前跳過2個檔案:
:2next
自動存檔
當你在不同檔案之間轉移時, 你必需記住用":write"命令來存檔.否則就會得到一個錯誤訊息. 如果你確定自己每次都是要儲存檔案, 就可以告訴Vim每當需要時就自動儲存檔案, 不必過問:
:set autowrite
如果你正在編輯一個不希望它被自動儲存的檔案, 還可以把該選項關閉:
:set noautowrite
編輯另一個檔案清單:
不用重新啟動Vim, 你就可以重新定義一個檔案清單. 下面的命令定義了要編輯3個檔案:
:args five.c six.c seven.h
或者用一個萬用字元, 就象在shell使用萬用字元一樣:
:args *.txt
Vim會開啟列表中的第一個檔案. 同樣, 如果當前檔案被改動但沒有存檔, 你需要先儲存當前的檔案, 或者用":args!"(加了一個!)放棄當前檔案中未存檔的內容.
你編輯過最後一個檔案了嗎?
當你有一個列表的檔案要編輯時, Vim假設你要全部編輯它們. 為防止你漏掉某些檔案過早地退出, Vim會在你沒有編輯過最後一個檔案就想退出時給出一個錯誤資訊:
E173: 46 more files to edit
如果你確定要退出, 只要再執行一次退出命令. 這次可以真正退出了(但是不要在這兩次執行同樣的命令中間再做其它操作)
切換到另一檔案:
要在兩個檔案間快速切換, 使用CTRL-^(在美語鍵盤上^位於字母鍵區的6上). 如:
:args one.c two.c three.c
當前編輯的檔案是one.c。
:next
現在變成two.c了. 使用CTRL-^可以讓你再回到one.c. 再執行一次CTRL-^又會再轉到two.c 如此迴圈, 如果你執行的是:
:next
現在你會轉到three.c. 注意CTRL-^命令並不改變當前你在檔案清單中的位置, 只有命令":next"和":previous"才會引起此位置的變化.
你上一個編輯的檔案叫"alternate"檔案. 所以剛進入Vim時就用這個命令的話它就無事可做, 因為你還沒有編輯過任何其它的檔案.
在檔案間複製粘貼:
本節講述如何在不同檔案之間複製內容, 我們以一個簡單的例子開始. 首先編輯你希望從中複製內容的檔案. 將游標移到某處檔案並按下"v". 該命令將開始Visual模式. 現在把游標移到要複製檔案的末尾按下"y". 該命令將yanks(複製)被選擇的內容.
要複製上面這一段的話, 你要做的是
:edit thisfile
/This
vjjjj$y
現在開始編輯你希望把複製的內容放入其中的檔案. 把游標置於你希望複製內容的地方, 用"p"把此前複製的內容粘貼到這裡.
:edit otherfile
/There
p
當然你可以用其它的命令來yank要複製的內容. 比如用"V"命令進入Visual模式整行整行地選擇文本. 或者用CTRL-V來選擇一個矩形塊的內容. 或者用"Y"選擇當前行單行的內容, 用"yaw"來yank-a-word, 等等.
"p"命令將把複製的內容放到游標之後. "P"則可以把要複製的內容放在游標之前. 注意Vim會知道你複製的內容是整行的內容還是一個矩形塊, 粘貼這些內容時也會採用相應的方式.
向檔案中追加內容
要把多行文本收集到一起寫入一個檔案, 可以用命令:
:write >> logfile
這將會把當前檔案的內容追加到檔案"logfile". 這樣做避免了你使用前面的方法去複製內容, 編輯log檔案. 這樣可以省去兩個環節. 但它
的局限是只能在檔案的最後追加內容.要想只追加幾行的內容到檔案中去, 可以在使用命令":write"之前先在Visual模式下選定要寫入的內容. 在第10章你會瞭解其它選擇文本行的
辦法.
查看檔案:
有時候你只想查看檔案的內容而已, 並不會向其中寫入什麼東西. 但不假思索就用":w"可會招致覆蓋原始檔案的風險. 要避免這種錯誤, 可以以唯讀方式編輯檔案.
下面的命令以唯讀方式運行Vim:
vim -R file
現在你將在唯讀模式編輯"file",此時嘗試用":w"會招來一個錯誤訊息告訴你該檔案不能被儲存.
如果你嘗試修改這個檔案的話也會得到一個警告訊息:
W10: Warning: Changing a readonly file
不過你還是可以做出修改. 這樣人們可以為了方便瀏覽起見格式化該檔案.
如果你改動了該檔案但忘了它是唯讀, 你還是可以儲存該檔案.在":write"命令之後使用!強制執行修飾符1.
如果是想強制性地避免對檔案進行修改, 可以用命令:
vim -M file
這樣每個修改檔案的嘗試都會失敗. 協助檔案就是這樣, 比如, 你試著去修改協助檔案時會看到這樣的錯誤資訊:
E21: Cannot make changes, °modifiable° is off
你可以用-M選項告訴Vim工作在viewer模式. 這都是表明你自願如此, 畢竟下面的命令還是可以去掉這層保護:
:set modifiable
:set write
變更檔名:
編輯一個新檔案的最好辦法是以一個內容相似的檔案為基礎進行修改. 比如, 你要寫一個移動檔案的程式. 同時你已經有了一個可以複製檔案的程式, 你可以這樣開始:
:edit copy.c
你可以刪除其中不需要的部分. 現在可以把它存成一個新檔案了.":saveas" 命令正好可堪此任:
:saveas move.c
Vim會以給定的檔案名稱儲存當前緩衝區中的內容, 同時開始編輯該檔案. 這樣下次你再用":write"命令的話, 它就是存成"move.c", 而"copy.c"還保持原來的內容.
如果你想改變當前正在編輯的檔案名稱, 但不想儲存該檔案, 就可以用命令:
:file move.c
Vim將把該檔案標記為"not edited". 這意味著Vim知道這不是你進入Vim時開始編輯的檔案. 你儲存該檔案時就會收到這樣的錯誤資訊:
E13: File exists (use ! to override)
這可以保護你意外地覆蓋了其它檔案.