Vim 重複命令篇
分類
說明
有時候在編輯文件時,有很多操作是重複的,比較簡單的例子是刪除5行,但這很簡單只需要打 5dd
就好,但如果是比較複雜的命令的話,例如:將每一行結尾加上「;」分號,除了一行一行加以外,還可以使用 Vim 記錄的方式來處理,本篇將分享 Vim 重複命令。
單次重複
.
重複上次改變,有計數前綴就重複 [count]
次。
例如:~
、dd
這些都是會改變的命令。
如果沒有數字前綴,使用上次的改變的重複次數。
不能重複命令列命令。
@:
重複上次命令列 [count]
次。
多次重複
查看幫助文件 :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!
。
重複組合操作
記錄
記錄是將命令記錄下來,記錄下來之後 Vim 就可以重複執行記錄的命令。
q{0-9a-zA-Z"}
在暫存器 {0-9a-zA-Z"}
裡記錄鍵入的字元(大寫名字的暫存器表示附加鍵入的內容)。
q
命令不能在執行暫存器時使用。同樣,在映射和 :normal
裡也不能。
q
記錄時,再按 q
停止記錄。
@{0-9a-z".=*+}
執行暫存器 {0-9a-z".=*+}
的內容 [count]
次。
@@
執行上次執行的 @{0-9a-z":*} [count]
次。
:[addr]@{0-9a-z".=*+}
把暫存器 {0-9a-z".=*+}
裡的內容看成一個 Ex 命令執行。
首先,把遊標放在 [addr]
行 (預設是當前行) 上,接著再執行 Ex 命令。
:[addr]@:
先把遊標放在 [addr]
行 (預設是當前行) 上,然後重複上次的命令列。
使用範例
abc
def
ghi
如上範例,我想將每一行結尾加上「;」分號,操作如下。
- 首先將游標位置放在 abc 那行,接著按
qa
。 - 按
A;
在結尾插入一個分號。 - 按
<Esc>
回到普通模式。 - 按
j
往下移動。 - 按
q
結束記錄。
此時游標會停留在 def 那行,接著按 2@a
就能重複執行上述的步驟2次。
使用 Vim 腳本
:so[urce] {file}
從 {file}
讀取 Ex 命令,即 :
開頭的命令,並執行。
:pa[ckadd][!] {name}
查看幫助 :help :packadd
在 packpath
裡搜尋可選的外掛目錄,然後執行找到的外掛文件。
目錄必須匹配: pack/*/opt/{name}
如果目錄還不在 runtimepath
,加入之。
如果目錄 pack/*/opt/{name}/after
存在,在 runtimepath
的尾部加入。
我只用來載入內建外掛,有關詳細資訊,請參考 Vim 幫助文件。
大部分命令都可重複
有很多命令都可以在前面加上數字,代表重複的次數,vim 說明文件會寫 [count]
就是用來表示可指定重複次數,預設為1,我在分享 vim 內容時有時候也會寫上 [count]
,但有時候會忽略,原因是太常見,或者不想讓命令看起來太複雜,也有可能是真的忘記,總之在普通模式時大部分都可以使用這個方式重複執行命令。
從 ex 中執行暫存器
如果想要重複自訂的 ex 命令,可以這樣操作。
- 在新的一行輸入 ex 命令,不包含冒號。
- 將輸入的 ex 命令存到暫存器中。
- 輸入
:@[x]
執行 ex 命令,[x]
帶入暫存器編號。
範例
- 在新的一行輸入
.m0
,功能是將當前行移動到第一行。 - 執行
"add
刪除當前行的內容存入暫存器 a。 - 隨便移動某一行,輸入
:@a
將當前行移動到第一行。
相關文章:
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!