VIM宏操作
這兩天看到一個小練習(xí),要求如下:
在GVIM下,將下面這張圖的內(nèi)容

改成下面這樣

并且指出,要用批量操作的方式,不能一行一行的鍵入
其實第一反應(yīng)是利用正則表達(dá)式來操作,但是讓用正則表達(dá)式以外的操作方式,查了不少方法,最終發(fā)現(xiàn)了VIM的宏,覺得挺有意思的,特地記錄一下
宏的基本操作
宏是用來重復(fù)執(zhí)行一組操作的
操作方式為
1、在普通模式下,按
q
開啟宏操作方式2、隨后輸入一個宏名作為寄存器,為了方便,可以輸入一個小寫字母,但不要用大寫字母喲
3、輸入要批量操作的內(nèi)容,VIM會將此時所有的操作記錄在寄存器中
4、操作完成后,再次在普通模式下按
q
結(jié)束宏記錄5、之后可以調(diào)用宏操作,調(diào)用方式有兩種,一種是在普通模式下按
@宏名
,另一種方式是在命令模式下輸入normal @宏名
下面一步步演示
先是在普通模式下依次按下
q
和a
,其中a
是我們的宏名

完成這一步可以看到在VIM窗口的左下角出現(xiàn)了記錄中
字樣,表明隨后的操作都將記錄在VIM的宏中
隨后,我們按下i
進(jìn)入輸入模式,并輸入
按Esc
退出輸入模式,再按q
,退出宏操作
此時便完成了宏記錄操作,記錄完宏操作后是這樣的

接下來分別用兩種方式調(diào)用宏

可以看到多出了一行內(nèi)容,用命令行方式調(diào)用

可以看到,再次輸入了一行內(nèi)容
如果想知道宏名中有哪些操作,可以在命令模式下輸入

可以看到剛才記錄在宏名a
中操作全部展示出來了
為什么不建議宏名用大寫字母
我們新建一個VIM文本,按照同樣的方式操作一下,只是將宏名由a
換成A
我們先來查看一下宏名A
中的內(nèi)容

可以看到,宏中并沒有任何操作,大寫字母的作用是在現(xiàn)有宏中添加操作的
對一個現(xiàn)有的宏,如果我們想修改里面的操作,如果我們按照
這個方式操作只會覆蓋掉原有的宏,并不會在原有宏的基礎(chǔ)上增加操作
接下我們試試在最初的宏a
中加上is 0
,用a
進(jìn)入和A
進(jìn)入分別會發(fā)生什么

可以看到,執(zhí)行宏操作后,只打印出is 0
,再來看看此時宏a
中的內(nèi)容

可以看到此時的宏中只有is 0
先將宏改回原來的樣子,再來換一種方式試試

可以看到此時調(diào)用宏時,不僅有打印出了number
也打印出了is 0
,最后再看看這種方式更改后宏a
中記錄的操作

宏中設(shè)置變量
有時我們會用到變量,而宏中也可以設(shè)定變量,操作方式如下
我們按照這個步驟試一下,過程如下

不過有一點要說明,在一個VIM文本中,所有的變量是共同有的,我們對宏a
進(jìn)行一個更改

可以看到在宏b
中設(shè)置的變量在宏a
中依舊可以調(diào)用
如果我們對變量 i
不斷進(jìn)行累加,可以在宏a
中加入let i = i + 1
此時,我們也可以在其他宏中更改變量i
,比如我們新建一個宏,如下:

可以看到此時i
的值是10
,我們再次在普通模式下按@a

可以看到此時是在10
的基礎(chǔ)上進(jìn)行累加的
如果,我們再新建一個宏,更改變量i
的變化方式呢,就像下面這樣

可以看到只有第一次調(diào)用宏時是按照宏m
的設(shè)定變化的,但隨后又按照宏a
的設(shè)定變化
下面給出最初的小練習(xí)的解決方案

其實利用正則表達(dá)式的方式也是能夠?qū)崿F(xiàn)的,正則表達(dá)的方式下次貼出來