Vim 編輯文件篇
分類
說明
用 Vim 編輯一個文件意味著:
- 把該文件讀到緩衝區
- 用編輯器指令修改緩衝區
- 把緩衝區內容寫回文件
這裡要提醒大家,編輯文件和編輯文本是不一樣的主題,編輯文件主要是操作文件,例如:切換文件,編輯文件等等。編輯文本是操作文件裡面的文本。
啟動多個文件
$ vim file1 file2 ...
使用這個方式可以一次開啟多個文件在同一個 vim 視窗。
關於 vim 開啟的方式,請參考 Vim 開啟篇。
緩衝區特殊符號
%
幫助文件: :help current-file
只要你不保存緩衝區,原來的文件保持不變。如果你開始編輯一個文件 (把它的內容讀到緩衝區裡),該文件名被認作 “當前文件名”,或者說當前緩衝區的名字。命令列上,可以用 “%” 來引用它。
#
幫助文件: :help alternate-file
如果已經有了另一個當前文件名,它會成為輪換文件名稱。命令列上,可以用 “#” 引用它。你也可以用 CTRL-^
命令在當前和替換文件之間切換。
一般
CTRL-G
:f[ile]
顯示目前文件名稱 (如同輸入的那樣,除非使用過 :cd
)、遊標位置 (除非置位了 ruler
選項) 和文件狀態 (唯讀、已修改、讀入錯誤、新文件)。
普通模式
CTRL-^
編輯輪換文件。多數情況下,輪換文件就是上次編輯的文件。這是切換兩個文件的一個快速方法。這和 :e #
等價,但也能用在沒有文件名的情況。
ex 命令
abandon
查看幫助: :help abandon
關於下面提到的 abandon
意思可能是說,如果要放棄修改需要在指令加上 !
,例如: :q!
。
:Next
::[count]N[ext] [count] [++opt] [+cmd]
編輯向前第 [count]
個文件。如果已經作了修改而 vim 不能放棄 abandon 目前的緩衝區,則該指令失敗。
:args
:ar[gs]
顯示參數列表,目前文件以方括號表示。
可用來顯示 vim 視窗有啟動那些文件。
:last
:la[st] [++opt] [+cmd]
開始編輯參數清單的最後一個文件。如果已經作了修改而 vim 不能放棄 abandon 目前的緩衝區,則該指令失敗。
範例:
:last
編輯最後一個文件。
:previous
:[count]prev[ious] [count] [++opt] [+cmd]
和 :Next
相同。
範例:
:prev
編輯上一個文件。
:rewind
:rew[ind] [++opt] [+cmd]
開始編輯參數列表的第一個文件。如果已經作了修改而 vim 不能放棄 abandon 目前的緩衝區,則該指令失敗。
範例:
:rew
編輯第一個文件。
編輯單個文件
: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}
。放棄當前緩衝區任何已有的改變。
[count]gf
編輯遊標之上或之後的文件名稱對應的文件。
參數列表
如果你在啟動 Vim 的時候給予多個文件名,這些文件將被記住,即參數列表。你可以跳到該列表裡的任何一個文件。
不要把它和 |:buffers| 指令裡的緩衝區列表混淆。
:[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}
相同。
寫入
: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}
。
寫入並退出
: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!
)。
相關文章:
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!