文章目錄
- 指令格式介紹
- 參考示例
-
- 範圍比對
- 删除比對的行
- 删除不比對的行
- 删除大量比對行
- 移動比對的行
- 複制比對的行
- 複制到 register a
- 反轉檔案中的每一行
- 在比對行後添加文字
指令格式介紹
全局指令
g
在 Vim 的底行指令模式下有着意想不到強大的功能。當想要在整個檔案中對于比對的行或者非比對行進行一些操作時,應該第一時間想到這個
g
指令
global
可以簡寫為
g
。
-
指定文本範圍,預設為整個文檔[range]
-
在範圍pattern
内的行如果比對range
,則執行pattern
command
-
表示取反,也就是不比對的行,也可以使用!
vglobal
- 如果不寫
,則會對整個文檔執行指令g
-
預設是列印文本command
整個指令可以了解成,在
range
範圍内比對 pattern 的行執行
command
;可以通過在“底行指令模式”下輸入
help ex-cmd
來檢視所有的
command
。
常用的
command
:
- d 删除
- m 移動
- t 拷貝
- s 替換
參考示例
範圍比對
比如在20行到200行之間,每一行下插入空行
20,200g/^/pu _
我知道
p
是粘貼,
u
是撤銷,完全不懂
pu _
是什麼鬼?誰知道的麻煩留言告訴我下,謝謝!
删除比對的行
删除與pattern比對的行
g/pattern/d
删除空白行
g/^$/d
删除不比對的行
g!/pattern/d
v/pattern/d
vglobal/pattern/d // 沒有驗證過,不知道行不行
inverse/pattern/d // 沒有驗證過,不知道行不行
删除大量比對行
Vim 在删除操作時,會先把要删除的内容放到寄存器中,假如沒有指定寄存器,會預設放到一個未命名的寄存器中,對于要删除大量比對行的行為,可能導緻 Vim 花一些時間處理這些拷貝,避免花費不必要的時間可以指定一個 blackhole 寄存器
_
g/pattern/d_
移動比對的行
将所有比對的行移動到檔案的末尾
g/pattern/m$
複制比對的行
将所有比對的行複制到檔案末尾
g/pattern/t$
複制到 register a
Vim每個字母都是一個寄存器,是以使用全局指令也可以将内容複制到某一個寄存器,比如
a
。
先在普通指令模式下輸入:
qaq
,清空寄存器 a。
qaq
qaq
清空寄存器
a
,
qa
開始記錄指令到
a
寄存器,
q
停止記錄。
然後在底行指令模式下輸入以下的指令:
g/pattern/y A
y
表示複制,大寫英文字母
A
表示把内容追加到寄存器
a
中,是以大寫字母
A
包含兩層含義,其一是指寄存器
a
;其二是指
append
。是以
y A
表示将比對到的内容複制到寄存器
a
中。如果使用小寫的
a
,則會覆寫寄存器
a
原有的内容。
存放到
a
寄存器之後就可以使用指令
"ap
來粘貼使用,其中
"a
表示寄存器
a
,
p
表示粘貼。
反轉檔案中的每一行
g/^/m0
解釋:
^
表示行首,每行都有行首,是以相當于比對到所有的行;
m
表示移動;
表示文檔第
1
行的上方。比對過程是這樣的,先比對到文檔的第
1
行,然後移到文檔的最上方;接着比對到第
2
行,也移動到文檔的最上方,此時文檔的最上方就是第
1
行文本的上方;後面就依照這樣的堆疊順序一行行往上放,最後所有的行就被倒過來了。
在比對行後添加文字
使用替換指令
s
在每行末尾插入字元串
mytext
。
%s/$/mytext
同樣使用全局 g 指令也可以實作同樣的效果,很顯然全局 g 指令把問題複雜化了。
g/pattern/s/$/mytext
g/pattern/
比對到需要在行尾插入字元串的行,再結合替換指令
s
将行尾替換成
mytext
,即在行尾插入
mytext