Vim 重複命令篇


建立時間: 2023年7月8日 12:57
更新時間: 2024年9月26日 08:48

說明

有時候在編輯文件時,有很多操作是重複的,比較簡單的例子是刪除5行,但這很簡單只需要打 5dd 就好,但如果是比較複雜的命令的話,例如:將每一行結尾加上「;」分號,除了一行一行加以外,還可以使用 Vim 記錄的方式來處理,本篇將分享 Vim 重複命令。

大部分命令都可重複

有很多命令都可以在前面加上數字,代表重複的次數,vim 說明文件會寫 [count] 就是用來表示可指定重複次數,預設為1,我在分享 vim 內容時有時候也會寫上 [count],但有時候會忽略,原因是太常見,或者不想讓命令看起來太複雜,也有可能是真的忘記,總之在普通模式時大部分都可以使用這個方式重複執行命令。

命令

常用的重複命令如下,更詳細的內容可以輸入 :help q :help . 等等的幫助文件查看。

命令 說明
q{0-9a-zA-Z"} 在暫存器 {0-9a-zA-Z"} 裡記錄鍵入的字元(大寫名字的暫存器表示附加鍵入的內容)。
q 記錄時,再按 q 停止記錄。
@{0-9a-z".=*+} 執行暫存器 {0-9a-z".=*+} 的內容 [count] 次。
@@ 執行上次執行的 @{0-9a-z":*} [count] 次。
:[addr]@{0-9a-z".=*+} 把暫存器 {0-9a-z".=*+} 裡的內容看成一個 Ex 指令執行。
命令 說明
@: 重複上次的 Ex 命令,: 開頭的命令。

單次重複

.

重複上次改變,有計數前綴就重複 [count] 次。

例如:~dd 這些都是會改變的命令。

如果沒有數字前綴,使用上次的改變的重複次數。

不能重複命令列命令。

重複組合操作

記錄

記錄是將命令記錄下來,記錄下來之後 Vim 就可以重複執行記錄的命令。

範例

abc
def
ghi

如上範例,我想將每一行結尾加上「;」分號,操作如下。

  1. 首先將游標位置放在 abc 那行,接著按 qa
  2. A; 在結尾插入一個分號。
  3. <Esc> 回到普通模式。
  4. j 往下移動。
  5. q 結束記錄。

此時游標會停留在 def 那行,接著按 2@a 就能重複執行上述的步驟2次。


從 ex 中執行暫存器

如果想要重複自訂的 ex 命令,可以這樣操作。

  1. 在新的一行輸入 ex 命令,不包含冒號。
  2. 將輸入的 ex 命令存到暫存器中。
  3. 輸入 :@[x] 執行 ex 命令,[x] 帶入暫存器編號。

範例

  1. 在新的一行輸入 .m0,功能是將當前行移動到第一行。
  2. 執行 "add 刪除當前行的內容存入暫存器 a。
  3. 隨便移動某一行,輸入 :@a 將當前行移動到第一行。

pattern 重複命令

查看幫助文件 :help :g

:[range]g[lobal]/{pattern}/[cmd]

[range] 界定的匹配模式 {pattern} 的文字行上執行 Ex 命令 [cmd] (預設值是 :p)。

範例:

:1,10g/a
在1到10行顯示有a的行內容。

:g/a/d
刪除所有行有a的行內容。

:g/pat/s//PAT/g
此命令會取代所有的 pat 為 PAT。同樣的功能也可以用: :%s/pat/PAT/g 實現。這樣省下了兩個字元!

:g/pat/s/dog/cat/g
此命令會搜尋所有符合 pat 的行,將行內所有的 dog 取代為 cat。


:[range]g[lobal]!/{pattern}/[cmd]

[range] 界定的不匹配模式 {pattern} 的文字行上執行 Ex 命令 [cmd] (預設值是 :p)。

範例:

:1,10g!/a
在1到10行顯示沒有a的行內容。


:[range]v[global]/{pattern}/[cmd]

:g!


觀看次數: 972
.recordingvim重複
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

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

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