Vim 重複命令篇
分類
說明
有時候在編輯文件時,有很多操作是重複的,比較簡單的例子是刪除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
如上範例,我想將每一行結尾加上「;」分號,操作如下。
- 首先將游標位置放在 abc 那行,接著按
qa
。 - 按
A;
在結尾插入一個分號。 - 按
<Esc>
回到普通模式。 - 按
j
往下移動。 - 按
q
結束記錄。
此時游標會停留在 def 那行,接著按 2@a
就能重複執行上述的步驟2次。
從 ex 中執行暫存器
如果想要重複自訂的 ex 命令,可以這樣操作。
- 在新的一行輸入 ex 命令,不包含冒號。
- 將輸入的 ex 命令存到暫存器中。
- 輸入
:@[x]
執行 ex 命令,[x]
帶入暫存器編號。
範例
- 在新的一行輸入
.m0
,功能是將當前行移動到第一行。 - 執行
"add
刪除當前行的內容存入暫存器 a。 - 隨便移動某一行,輸入
:@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!
。
相關文章:
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!