Vim 編輯文件篇
分類
說明
用 Vim 編輯一個文件意味著:
- 把該文件讀到緩衝區
- 用編輯器指令修改緩衝區
- 把緩衝區內容寫回文件
這裡要提醒大家,編輯文件和編輯文本是不一樣的主題,編輯文件主要是操作文件,例如:切換文件,編輯文件等等。編輯文本是操作文件裡面的文本。
啟動多個文件
$ vim file1 file2 ...
使用這個方式可以一次開啟多個文件在同一個 vim 視窗。
關於 vim 開啟的方式,請參考 Vim 開啟篇。
緩衝區特殊符號
%
幫助文件: :help current-file
只要你不保存緩衝區,原來的文件保持不變。如果你開始編輯一個文件 (把它的內容讀到緩衝區裡),該文件名被認作 “當前文件名”,或者說當前緩衝區的名字。命令列上,可以用 “%” 來引用它。
#
幫助文件: :help alternate-file
如果已經有了另一個當前文件名,它會成為輪換文件名稱。命令列上,可以用 “#” 引用它。你也可以用 CTRL-^
命令在當前和替換文件之間切換。
放棄緩衝區
查看幫助: :help abandon
Vim 記住你是否修改了緩衝區。你所作的修改不會不小心丟失。如果試著不寫回而退出,或開始編輯別的文件,Vim 會拒絕。要繞過這重保護,在命令後面加上 !
。這樣,修改就會失去。例如: :q
在緩衝區修改後不會運作,但 :q!
會。
一般
CTRL-G
:f[ile]
顯示目前文件名稱 (如同輸入的那樣,除非使用過 :cd
)、遊標位置 (除非置位了 ruler
選項) 和文件狀態 (唯讀、已修改、讀入錯誤、新文件)。
:f[ile]!
和 :file
類似,但即使 shortmess
要求截短文件名,也不這麼做。
:f[ile][!] {name}
設定目前文件名稱為 {name}
。可選的 !
避免截短訊息。
功能類似複製當前文件,取名為 {name}
。
範例
:file %.backup
備份當前文件,名稱為當前文件後面加.backup
編輯單個文件
:e[dit] [++opt] [+cmd]
編輯當前文件。可用於在它被 Vim 之外的程序所改變的時候重新編輯當前文件。
:e[dit]! [++opt] [+cmd]
總是編輯當前文件。放棄當前緩衝區任何已有的改變。如果你想從頭來過,這就會很有用。
範例
:e!
回到上一次儲存的文件內容,放棄當前緩衝區任何已有的改變。
:e[dit] [++opt] [+cmd] {file}
編輯文件 {file}
。如果當前緩衝區已修改,這會失敗。
範例
:e index.html
編輯 index.html。
:e + file
從最後一行開始編輯 file。
:e +num file
從第 num 行開始編輯 file。
:e #
編輯輪換文件,請參考緩衝區特殊符號。
:e[dit]! [++opt] [+cmd] {file}
總是編輯文件 {file}
。放棄當前緩衝區任何已有的改變。
:e[dit] [++opt] [+cmd] #[count]
編輯第 [count]
個緩衝區 (根據 :files
顯示的結果)。
這個命令和 [count] CTRL-^
一樣,但是 :e #
在輪換緩衝區沒有檔案名稱時不能工作,而 CTRL-^
則可以。
CTRL-^
編輯輪換文件。
多數情況下,輪換文件就是上次編輯的文件。這是切換兩個文件的一個快速方法。這和 :e #
等價,但也能用在沒有文件名的情況。
[count]gf
編輯遊標之上或之後的文件名稱對應的文件。
查看幫助: :help [+cmd]
[+cmd]
參數可以用來在新開啟的文件定位遊標或執行任何其他命令:
-
+
從最後一行開始。
-
+{num}
從第
{num}
行開始。 -
+/{pat}
從匹配
{pat}
的第一行開始。 -
+{command}
開啟新檔案以後執行
{command}
。
{command}
可以是任何 Ex 指令。
參數列表
如果你在啟動 Vim 的時候給予多個文件名,這些文件將被記住,即參數列表。你可以跳到該列表裡的任何一個文件。
不要把它和 :buffers
命令裡的緩衝區列表混淆。
:ar[gs]
顯示參數列表,目前文件以方括號表示。
可用來顯示 vim 視窗有啟動那些文件。
:ar[gs] [++opt] [+cmd] {arglist}
查看幫助 :help :args_f
定義 {arglist}
為新的參數列表並編輯其中的第一個。如果已經作了修改而 vim 不能放棄目前的緩衝區,則該命令失敗。
:ar[gs]! [++opt] [+cmd] {arglist}
查看幫助 :help :args_f!
定義 {arglist}
為新的參數列表並編輯其中的第一個。忽略任何對目前緩衝區的改動。
:[count]n[ext] [++opt] [+cmd]
編輯向後第 [count]
個文件。如果已經作了修改而 vim 不能放棄 abandon 目前的緩衝區,則該指令失敗。
範例
:n
編輯下一個文件。
:[count]n[ext]! [++opt] [+cmd]
編輯向後第 [count]
個文件。忽略任何對目前緩衝區的已有修改。
範例
:n!
強制編輯下一個文件。
:n[ext] [++opt] [+cmd] {arglist}
和 :args {arglist}
相同。
:n[ext]! [++opt] [+cmd] {arglist}
和 :args! {arglist}
相同。
::[count]N[ext] [count] [++opt] [+cmd]
編輯向前第 [count]
個文件。如果已經作了修改而 vim 不能放棄目前的緩衝區,則該命令失敗。
:[count]N[ext]! [count] [++opt] [+cmd]
編輯向前第 [count]
個文件。忽略任何對目前緩衝區的已有修改。
:[count]prev[ious] [count] [++opt] [+cmd]
和 :Next
相同。
範例
:prev
編輯上一個文件。
:rew[ind] [++opt] [+cmd]
開始編輯參數列表的第一個文件。如果已經作了修改而 vim 不能放棄目前的緩衝區,則該命令失敗。
範例
:rew
編輯第一個文件。
:rew[ind]! [++opt] [+cmd]
開始編輯參數列表的第一個文件。忽略任何對目前緩衝區的已有修改。
:fir[st][!] [++opt] [+cmd]
:rewind
的別名。
:la[st] [++opt] [+cmd]
開始編輯參數列表的最後一個文件。如果已經作了修改而 vim 不能放棄目前的緩衝區,則該命令失敗。
範例:
:last
編輯最後一個文件。
:la[st]! [++opt] [+cmd]
開始編輯參數列表的最後一個文件。忽略任何對目前緩衝區的已有修改。
寫入
:w[rite] [++opt]
將整個緩衝區寫入目前文件。這是保存文件更動最普通的方式。
如果置位了 readonly
選項或其他原因不能寫入文件,它會失敗。
範例
:w
儲存當前文件
:w[rite]! [++opt]
和 :write
類似,但即使 readonly
已置位或有其他原因寫入被拒絕,還是強制寫入。
注意: 這可能會改變文件的權限和擁有者,或解除 (符號) 連結。
:[range]w[rite][!] [++opt]
將指定的行寫入當前文件。這比較不尋常,因為該文件不會包含緩衝區中的所有行。
:[range]w[rite] [++opt] {file}
將指定行寫入文件 {file}
。
範例
:w {file}
儲存到 {file}
文件,不指定 [range]
就代表全寫,就像另存新文件。
:w %.backup
儲存到 file.backup 文件,類似備份文件的作用。
:[range]w[rite]! [++opt] {file}
將指定行寫入文件 {file}
。覆蓋已存在的文件。
範例
:w! {file}
強制將文件寫入到 {file}
,例如:我用 vim 開啟 a 文件 $ vim a
,假設已經存在 b 文件,我可以用 :w! b
寫入到 b 文件。
:[range]w[rite][!] [++opt] >>
將指定行附加到當前文件後。
幫助文件 :help :w_a
:[range]w[rite][!] [++opt] >> {file}
將指定行附加到文件 {file}
之後。!
強制寫入,即使該文件還不存在。
範例
:1,100w >> {file}
將1到100行附加到 {file}
。
:wa[ll]
儲存所有已修改的緩衝區。沒有文件名稱的緩衝區會報錯誤。只讀的緩衝區不會被寫入。
:wa[ll]!
儲存所有已修改的緩衝區,包括唯讀的。沒有文件名稱的緩衝區不會寫入並報錯誤。
寫入並退出
:q[uit]
退出目前視窗。
如果是最後的一個編輯視窗,就退出 Vim。
如果已經有修改且 Vim 拒絕放棄目前的緩衝區,或者如果參數列表的最後一個文件還沒有被編輯,則該操作失敗。
:q[uit]!
退出不保存,即使當前緩衝區發生了修改。
:wq [++opt]
寫回目前的文件並且關閉視窗。如果是最後的一個編輯視窗,Vim 退出。
如果文件只讀或該緩衝區無名,寫回操作失敗。
如果參數列表的最後一個文件還沒有編輯,則退出操作失敗。
:wq! [++opt]
寫回目前的文件並且關閉視窗。如果是最後的一個編輯視窗,Vim 退出。
如果目前緩衝區無名,則寫回操作失敗。
:wq [++opt] {file}
寫入到 {file}
並且關閉視窗。如果是最後的一個編輯視窗,Vim 退出。
如果參數列表的最後一個文件還沒有編輯,則退出操作失敗。
:wq! [++opt] {file}
寫入到 {file}
並且關閉視窗。如果是最後的一個編輯視窗,Vim 退出。
如果參數列表的最後一個文件還沒有編輯,則退出操作失敗。
:[range]wq[!] [++opt] [file]
同上,但只寫入 [range]
界定的那些行。
:[range]x[it][!] [++opt] [file]
和 :wq
類似,但只有在文件已修改時寫入才會實際進行。
ZZ
如果文件被修改,寫回目前文件。然後關閉目前視窗。(和 :x
相同)。
如果有目前文件有多個視窗,只有目前視窗會被關閉。
ZQ
退出,不檢查是否發生了修改 (同 :q!
)。
:qa[ll]
退出 Vim,除非有修改過的緩衝區。
:qa[ll]!
退出 Vim,不會儲存任何的修改。
:quita[ll][!]
同 :qall
。
:wqa[ll] [++opt]
:xa[ll]
儲存所有修改過的緩衝區並退出 Vim。如果其中有無名的、唯讀的、其他原因寫入失敗的緩衝區,或有仍在執行作業的終端,Vim 不會退出。
:wqa[ll]! [++opt]
:xa[ll]!
儲存所有修改過的緩衝區,甚至包括唯讀的,然後退出 Vim。不過,如果有無名或其他原因寫入失敗的緩衝區,Vim 仍然不會退出。
當前目錄
cd[!]
在非 Unix 系統上且 cdhome
關閉時: 顯示目前目錄名稱。否則,切換目前目錄到主 (home) 目錄。清除任何局部於視窗的目錄。
在所有的系統上,用 :pwd
可以顯示目前目錄。
:cd[!] {path}
切換目前目錄為 {path}
。
:chd[ir][!] [path]
和 :cd
相同。
:pw[d]
顯示目前目錄名稱。
相關文章:
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!