這篇文章是 Vim 用戶指南系列文章中的一篇:
Vim 初學(xué)者入門指南
Vim 快捷鍵速查表
5 個(gè)針對(duì)有經(jīng)驗(yàn)用戶的 Vim 技巧
3 個(gè)針對(duì)高級(jí)用戶的 Vim 編輯器實(shí)用技巧
請(qǐng)記住,在這篇文章中我們將討論的一些 Vim 編輯器技巧是針對(duì)高級(jí)用戶的。注:如果你是第一次接觸 Vim,你可以首先閱讀我們的入門指南。對(duì)于已經(jīng)使用過(guò) Vim 編輯器的用戶,我確信Vim 快捷鍵速查表將會(huì)對(duì)你很有幫助。如果你已經(jīng)是一名有經(jīng)驗(yàn)的用戶,你可能對(duì)一些針對(duì)有經(jīng)驗(yàn)用戶的技巧比較感興趣。
請(qǐng)注意文中提到的所有技巧絕大多數(shù)都是在簡(jiǎn)單、易于理解的代碼環(huán)境中進(jìn)行闡述的,因?yàn)樗鼈冊(cè)谲浖_發(fā)中確實(shí)很實(shí)用。但這并不意味著普通用戶(非程序員、沒(méi)有把 Vim 作為一般的文本編輯器)在他們的工作中用不到。
1、為文件設(shè)置特定的變量
有時(shí)候,在一個(gè)特定文件中,你可能想把輸入的制表符用空格代替,或者想要把源代碼文件使用兩個(gè)空格縮進(jìn),即便編輯器的默認(rèn)縮進(jìn)是四個(gè)空格?;旧衔覀?cè)谶@兒討論對(duì)針對(duì)文件的的更改。 Vim 提供的這個(gè)特性允許你對(duì)一個(gè)指定的文件更改特定的設(shè)置。這個(gè)特性叫做 “模式行(Modeline)” 。
比如,如果你想把輸入的每一個(gè)制表符(Tab)用空格代替,那么你只需要在文件的前幾行或最后幾行加入下面的模式行:
# vim: set expandtab:
如果想把默認(rèn)縮進(jìn)從 4 個(gè)空格變成 2 個(gè)空格,可以在源文件中添加下面的模式行:
// vim: noai:ts=2:sw=2
在使用模式行時(shí),請(qǐng)記住下面這幾個(gè)重要的點(diǎn):
模式行只能添加在文件中的前五行或者最后五行。
為了使用模式行這個(gè)特性,必須在 .vimrc 文件中添加 :set modeline
在以 root 用戶身份對(duì)文件進(jìn)行編輯的時(shí)候該特性失效。
了解更多的信息,請(qǐng)閱讀該特性的官方文檔。
2、 關(guān)鍵字補(bǔ)全
當(dāng)你開始寫的復(fù)雜代碼越來(lái)越多或者開始在一個(gè)大的源文件上編輯時(shí),你會(huì)遇到一些變量名字。有時(shí),要記住所有的變量名字不太容易,所以當(dāng)需要輸入變量名字的時(shí)候,你通常從已經(jīng)使用過(guò)的地方復(fù)制過(guò)來(lái)。
幸運(yùn)的是,使用 Vim 你只需要輸入變量的幾個(gè)起始字母即可。在’插入模式’中,按Ctrl + n或者Ctrl + p可以得到一個(gè)匹配的關(guān)鍵詞列表。 Ctrl + n用來(lái)插入下一個(gè)匹配詞;Ctrl + p給出一個(gè)之前匹配的關(guān)鍵詞列表。
下圖是該特性的一個(gè)展示:
針對(duì)高級(jí)用戶的 Vim 編輯實(shí)用技巧針對(duì)高級(jí)用戶的 Vim 編輯實(shí)用技巧
正如上面的屏幕截圖清晰展示的那樣,列表中也會(huì)出現(xiàn)其他源文件中包含的詞。
3、 搜索
假設(shè)你正在調(diào)試代碼,其中一個(gè)需要做的工作是快速查看一個(gè)變量在一個(gè)文件中所有出現(xiàn)的地方。一個(gè)常用的方法是退出‘插入模式’,輸入 /[變量名字]命令,按回車 ,然后返回‘插入模式’,使用n和p在關(guān)鍵字之間導(dǎo)航。
上面講到的這種方法沒(méi)毛病,但是還有一種更簡(jiǎn)單、更快捷的方法可以來(lái)完成這樣的搜索。使用這種方法,首先你需要退出‘插入模式’,然后把光標(biāo)移動(dòng)到你想要搜索的詞/變量下面,這并不費(fèi)時(shí)。接下來(lái),你只需要按Shift + *即可。
重復(fù)這樣做,然后編輯器將會(huì)帶你找到在文件中所有使用了這個(gè)詞/變量的地方。
結(jié)論
盡管是針對(duì)高級(jí)用戶,但文章中討論的這些技巧并不難理解,也比較容易使用。如果你具有一定的基礎(chǔ),那么你能夠從中獲益很多。不必多說(shuō),無(wú)論是任何新特性或觀念,你需要勤于練習(xí)這些技巧才能夠把它們變成一種習(xí)慣。