W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
到目前為止我們已經(jīng)介紹了一堆Vim命令,這可以讓你可以快速自定義Vim。除了自動(dòng)命令組外其他的命令都是單行的命令,你可以不費(fèi)吹灰之力就把它們添加到你的~/.vimrc
文件中。
這本書的下一部分我們會(huì)開始專注于Vim腳本編程,將其當(dāng)作一個(gè)真正的編程語言對(duì)待,不過在此之前,我會(huì)先講一些在編寫大量的Vim腳本時(shí)需要注意的東西。
Vim腳本非常強(qiáng)大,但對(duì)于那些想進(jìn)入這個(gè)領(lǐng)域的程序員而言,在最近幾年它似乎逐漸變得像一個(gè)彎彎曲曲的迷宮,讓進(jìn)入的人找不到歸路。
Vim的選項(xiàng)和命令經(jīng)常會(huì)比較簡短生硬,并且難于閱讀,另外處理兼容性問題也會(huì)增加代碼的復(fù)雜度。編寫一個(gè)插件并且允許用戶自定義又會(huì)讓復(fù)雜度更進(jìn)一級(jí)。
在編寫大量Vim腳本時(shí)要保持防御意識(shí)。要養(yǎng)成習(xí)慣添加注釋說明某段代碼是干什么的,如果有一個(gè)相關(guān)的幫助主題(help topic),最好在注釋中說明!
這不僅會(huì)給你以后的維護(hù)帶來方便,而且如果你將你的~/.vimrc
文件分享到Bitbucket或者GitHub(強(qiáng)烈推薦你這么做),這些注釋也會(huì)幫助其他的人理解你的腳本。
之前創(chuàng)建的映射可以讓我們在使用Vim的同時(shí)方便快捷地編輯和加載~/.vimrc
。不幸的是這會(huì)導(dǎo)致~/.vimrc
中的代碼快速增長以至失去控制,并且變得難于閱讀瀏覽。
我們用于對(duì)付這種情況的方法是使用Vim的代碼折疊功能,將多行代碼組織起來的作為一個(gè)部分然后對(duì)這部分的代碼進(jìn)行折疊。如果你從來沒有用過Vim的折疊功能,那么你現(xiàn)在應(yīng)該盡快去瞄一瞄。很多人(包括我自己)都認(rèn)為在日常編碼工作中代碼折疊是不可或缺的。
首先我們需要為Vim腳本文件設(shè)置折疊。在你的~/.vimrc
文件中添加下面幾行:
augroup filetype_vim
autocmd!
autocmd FileType vim setlocal foldmethod=marker
augroup END
這會(huì)告訴Vim對(duì)任何Vim腳本文件使用marker
折疊方法。
現(xiàn)在在顯示~/.vimrc
文件的窗口中執(zhí)行:setlocal foldmethod=marker
。如果你不執(zhí)行這個(gè)命令,你會(huì)發(fā)現(xiàn)加載~/.vimrc
文件后沒什么效果,這是因?yàn)閂im已經(jīng)為這個(gè)文件設(shè)置了文件類型(FileType),而自動(dòng)命令只會(huì)在設(shè)置文件類型的時(shí)候執(zhí)行。這讓你以后不需要手動(dòng)來做這個(gè)事情。
現(xiàn)在在自動(dòng)命令組開始和結(jié)束的地方添加兩行,像下面這樣:
" Vimscript file settings ---------------------- {{{
augroup filetype_vim
autocmd!
autocmd FileType vim setlocal foldmethod=marker
augroup END
" }}}
切換到常用模式,將光標(biāo)放到這些文字中的任意一行,然后敲擊za
。Vim會(huì)折疊從包含{{{
的行到包含}}}
的行之間的所有行。再敲擊za
會(huì)展開所有這些行。
剛開始你可能會(huì)覺得為了代碼折疊而對(duì)源代碼進(jìn)行注釋會(huì)有些不合理,我剛開始也這么想。對(duì)于大多數(shù)文件我現(xiàn)在仍然覺得這種做法并并不合適。因?yàn)椴皇撬腥硕际褂孟嗤木庉嬈鳎栽诖a中添加的折疊注釋對(duì)于那些不用Vim的人而言就像是噪音。
不過Vim腳本文件比較特殊,因?yàn)橐粋€(gè)不用Vim的人不太可能會(huì)讀你的代碼,并且最重要的是如果不對(duì)代碼進(jìn)行分組處理,寫著寫著你就不知道寫到哪里了,嚴(yán)重點(diǎn)可能會(huì)經(jīng)脈盡斷,吐血而亡。
先自己嘗試嘗試吧,說不定你會(huì)逐漸喜歡上它。
對(duì)于大多數(shù)命令和選項(xiàng),Vim支持使用它們的縮寫。例如,下面的兩個(gè)命令做的事情完全一樣:
:setlocal wrap
:setl wrap
我_強(qiáng)烈_提醒你不要在你的~/.vimrc
或者是你編寫的插件中使用這些縮寫。Vim腳本對(duì)于初學(xué)者而言本來就已經(jīng)夠晦澀難懂了;從長遠(yuǎn)來看使用縮寫只會(huì)使得它更難于閱讀。即使_你_知道某個(gè)縮寫的意思,其他人未必讀得懂。
換句話說,縮寫只在編碼的過程中手動(dòng)執(zhí)行命令的時(shí)候會(huì)很有用。在你按了回車鍵以后,就沒人會(huì)看到你輸入什么了,這樣你也沒必要輸入更多的字符。
檢查你的~/.vimrc
文件,將所有相關(guān)的行組織起來。你可以這么開頭:“基本設(shè)置(Basic Settings)“,”文件類型相關(guān)設(shè)置(FileType-specific settings)”,“映射(Mappings)”,和“狀態(tài)條(Status Line)”。然后在每個(gè)部分添加折疊標(biāo)記和標(biāo)題。
想想怎么讓Vim在第一次打開~/.vimrc
文件的時(shí)候自動(dòng)折疊所有設(shè)置了折疊注釋的行。閱讀:help foldlevelstart
你會(huì)知道怎么搞。
檢查你的~/.vimrc
文件,把所有的命令和選項(xiàng)的縮寫改成全稱。
檢查你的~/.vimrc
文件,確保里面沒有什么敏感信息。然后創(chuàng)建一個(gè)git或者M(jìn)ercurial倉庫,再將~/.vimrc
文件放到里面,然后將這個(gè)文件鏈接到~/.vimrc
。
提交你剛才創(chuàng)建的倉庫,并把它放到Bitbucket或者GitHub上,這樣其他的人都可以看到和學(xué)習(xí)它。記住要經(jīng)常提交和推送到倉庫中,這樣你所做的修改也會(huì)被記錄下來。
如果你不只在一個(gè)機(jī)器上使用Vim,那你就可以克隆那個(gè)倉庫,然后像之前一樣將這個(gè)文件鏈接到~/.vimrc
文件。這樣你就可以在所有的機(jī)器上都使用同樣的Vim配置了。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: