vim狀態(tài)行不顯示問題:set laststatus=2
移除狀態(tài)行:set laststatus=0
Set tabstop=4 tab縮進(jìn)4個(gè)空格
在名稱的前面加一個(gè) & 符號(hào)是告訴Vim你正在引用這個(gè)選項(xiàng)允蚣,而不是在使用一個(gè)名稱剛好相同的變量迷捧。
如果你想將某個(gè)選項(xiàng)作為變量來(lái)設(shè)置它的本地值寄锐,而不是全局值妆距,你需要在變量名前面加前
綴梅鹦。
你也可以將寄存器當(dāng)作變量來(lái)讀取和設(shè)置。
當(dāng)某個(gè)變量由一個(gè)字符和冒號(hào)開頭症汹,那么這就表示它是一個(gè)作用域變量塑崖。
對(duì)字符串進(jìn)行比較時(shí)使用==#或者==?進(jìn)行大小寫敏感與大小寫不敏感的比較來(lái)減少因?yàn)橛脩粼O(shè)置而造成的問題(例如 set ignorecase)。
沒有作用域限制的Vimscript函數(shù)必須以一個(gè)大寫字母開頭惹苗!
Vimscript里調(diào)用函數(shù)有兩種不同的方法:使用call命令 --在表達(dá)式里調(diào)用函數(shù)殿较。
一個(gè)vimscript函數(shù)不返回一個(gè)值,它隱式返回0桩蓉。
當(dāng)你在Vim中定義了一個(gè)接受可變參數(shù)的函數(shù)淋纲, a:0 將被設(shè)置為你額外給的參數(shù)數(shù)量(譯注:注意是額外的參數(shù)數(shù)量)。
可以使用 a:1 , a:2 等等來(lái)引用你的函數(shù)接受的每一個(gè)額外參數(shù)触机。
當(dāng)一個(gè)函數(shù)可以接受可變參數(shù)帚戳, a:000 將被設(shè)置為一個(gè)包括所有傳遞過(guò)來(lái)的額外參數(shù)的列表(list)。不能對(duì)列表使用echom儡首。
不能對(duì)參數(shù)變量重新賦值片任。
. 是Vim中的"連接字符串"運(yùn)算符,可以用來(lái)連接字符串蔬胯。
echom的輸出跟echo的輸入有時(shí)會(huì)有所不同对供。主要是對(duì)特殊字符的轉(zhuǎn)義顯示 \n ^@
使用單引號(hào)將告訴Vim,你希望字符串所見即所得,無(wú)視轉(zhuǎn)義字符串产场。 一個(gè)例外是一行中連續(xù)兩個(gè)單引號(hào)將產(chǎn)生一個(gè)單引號(hào)鹅髓。(譯注:相當(dāng)于某種轉(zhuǎn)義)
execute 命令用來(lái)把一個(gè)字符串當(dāng)作Vimscript命令執(zhí)行。
normal 命令簡(jiǎn)單地接受一串鍵值并當(dāng)作是在normal模式下輸入的京景。就是那么簡(jiǎn)單窿冯!
normal命令將顧及當(dāng)前的所有映射。這意味著我們需要給 normal 提供類似于 nnoremap 之于 nmap 的版本确徙, 否則我們沒法使用它——考慮到我們猜測(cè)不了用戶的映射方式醒串。在寫Vim腳本時(shí),你應(yīng)該總是使用 normal! 鄙皇,永不使用 normal 芜赌。不要信任用戶在 ~/.vimrc 中的映射。
normal! 不會(huì)解析像 <cr> 那樣的特殊字符序列伴逸。之前我們嘗試過(guò)用 normal! 來(lái)執(zhí)行一個(gè)搜索命令卻無(wú)法輸入必須的回車來(lái)開始進(jìn)行搜索缠沈。 結(jié)合 execute 和 normal! 將解決這個(gè)問題。execute 允許你創(chuàng)建命令错蝴,因而你能夠使用Vim普通的轉(zhuǎn)義字符串來(lái)生成你需要的"打不出"的字符洲愤。
我們用 <c-u> 來(lái)執(zhí)行"從光標(biāo)所在處刪除到行首的內(nèi)容",移除多余文本顷锰。
使用負(fù)數(shù)索引一個(gè)字符串會(huì)沒有報(bào)錯(cuò)地得到一個(gè)空字符串禽篱。
當(dāng)鍵僅由字母,數(shù)字和/或下劃線組成時(shí)馍惹,Vimscript也支持Javascript風(fēng)格的"點(diǎn)"查找。
如果一個(gè)Vimscript變量要引用一個(gè)函數(shù)玛界,它就要以大寫字母開頭万矾。
~/.vim/plugin/
~/.vim/plugin/ 下的文件將在每次Vim啟動(dòng)的時(shí)候執(zhí)行。 這里的文件包括那些無(wú)論何時(shí)慎框,在啟動(dòng)Vim之后你就想加載的代碼良狈。
~/.vim/ftdetect/
~/.vim/ftdetect/ 下的文件在每次你啟動(dòng)Vim的時(shí)候也會(huì)執(zhí)行。ftdetect 是"filetype detection"的縮寫笨枯。 這里的文件僅僅負(fù)責(zé)啟動(dòng)檢測(cè)和設(shè)置文件的 filetype 類型的自動(dòng)命令薪丁。 這意味著它們一般不會(huì)超過(guò)一兩行。
~/.vim/ftplugin/
~/.vim/ftplugin/ 下的文件則各不相同馅精。一切皆取決于它的名字!當(dāng)Vim把一個(gè)緩沖區(qū)的 filetype 設(shè)置成某個(gè)值時(shí)严嗜, 它會(huì)去查找 ~/.vim/ftplugin/ 下對(duì)應(yīng)的文件。 比如:如果你執(zhí)行 set filetype=derp 洲敢,Vim將查找 ~/.vim/ftplugin/derp.vim 漫玄。 一旦文件存在,Vim將執(zhí)行它。Vim也支持在 ~/.vim/ftplugin/ 下放置文件夾睦优。 再以我們剛才的例子為例: set filetype=derp 將告訴Vim去執(zhí)行 ~/.vim/ftplugin/derp/ 下的全部 *.vim 文件渗常。 這使得你可以按代碼邏輯分割在 ftplugin 下的文件。因?yàn)槊看卧谝粋€(gè)緩沖區(qū)中執(zhí)行 filetype 時(shí)都會(huì)執(zhí)行這些文件汗盘,所以它們只能設(shè)置buffer-local選項(xiàng)皱碘! 如果在它們中設(shè)置了全局選項(xiàng),所有打開的緩沖區(qū)的設(shè)置都會(huì)遭到覆蓋隐孽!
~/.vim/indent/
~/.vim/indent/ 下的文件類似于 ftplugin 下的文件癌椿。加載時(shí)也是只加載名字對(duì)應(yīng)的文件。indent 文件應(yīng)該設(shè)置跟對(duì)應(yīng)文件類型相關(guān)的縮進(jìn)缓醋,而且這些設(shè)置應(yīng)該是buffer-local的如失。是的,你當(dāng)然可以把這些代碼也一并放入 ftplugin 文件送粱, 但最好把它們獨(dú)立出來(lái)褪贵,讓其他Vim用戶理解你的意圖。這只是一種慣例抗俄,不過(guò)請(qǐng)盡量體貼用戶并遵從它脆丁。
~/.vim/compiler/
~/.vim/compiler 下的文件非常類似于 indent 文件。它們應(yīng)該設(shè)置同類型名的當(dāng)前緩沖區(qū)下的編譯器相關(guān)選項(xiàng)动雹。
~/.vim/after/
~/.vim/after 文件夾有點(diǎn)神奇槽卫。這個(gè)文件夾下的文件會(huì)在每次Vim啟動(dòng)的時(shí)候加載, 不過(guò)是在 ~/.vim/plugin/ 下的文件加載了之后胰蝠。這允許你覆蓋Vim的默認(rèn)設(shè)置歼培。實(shí)際上你將很少需要這么做,所以不用理它茸塞, 除非你有"Vim設(shè)置了選項(xiàng) x 躲庄,但我想要不同的設(shè)置"的主意。
~/.vim/autoload/
~/.vim/autoload 文件夾就更加神奇了钾虐。事實(shí)上它的作用沒有聽起來(lái)那么復(fù)雜噪窘。簡(jiǎn)明扼要地說(shuō): autoload 是一種延遲插件代碼到需要時(shí)才加載的方法。
~/.vim/doc/
最后效扫, ~/.vim/doc/ 文件夾提供了一個(gè)你可以放置你的插件的文檔的地方倔监。 Vim對(duì)文檔的要求是多多益善(看看我們執(zhí)行過(guò)的所有 :help 命令就知道),所以為你的插件寫文檔是重要的菌仁。
Vim設(shè)置 runtimepath 以便查找要加載的文件浩习。
Vim自動(dòng)替你把 ftdetect/*.vim 文件包裝成自動(dòng)命令組。
為了高亮某個(gè)語(yǔ)法:
你首先要用 syntax keyword 或相關(guān)命令(我們待會(huì)會(huì)提到)掘托,定義一組語(yǔ)法類型瘦锹。
然后你要把這組類型鏈接到高亮組(highlighting groups)。 一個(gè)高亮組是你在配色方案里定義的東西,比如"函數(shù)名應(yīng)該是藍(lán)色的"弯院。
自動(dòng)加載調(diào)用的函數(shù)要使用絕對(duì)路徑進(jìn)行定義辱士。當(dāng)Vim找到它需要自動(dòng)加載的文件后,它在調(diào)用對(duì)應(yīng)函數(shù)之前就加載了整個(gè)文件听绳。