Vim 編輯文件篇


建立時間: 2023年9月28日 09:36
更新時間: 2024年10月9日 09:16

說明

用 Vim 編輯一個文件意味著:

  1. 把該文件讀到緩衝區
  2. 用編輯器指令修改緩衝區
  3. 把緩衝區內容寫回文件

這裡要提醒大家,編輯文件和編輯文本是不一樣的主題,編輯文件主要是操作文件,例如:切換文件,編輯文件等等。編輯文本是操作文件裡面的文本。

啟動多個文件

$ 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!)。


觀看次數: 720
filevim
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!