我們需要講到的第一件事是如何配置我們的插件。在過(guò)去,這會(huì)是一次混亂的折騰, 但現(xiàn)在我們有一個(gè)工具可以非常方便地安裝Vim插件。
我們需要先過(guò)一下基本的配置方式,然后我們會(huì)講到如何省下麻煩。
## 基本配置方式
Vim支持把插件分割成多個(gè)文件。你可以在`~/.vim`下創(chuàng)建許多不同種類的文件夾來(lái)放置不同的內(nèi)容。
我們現(xiàn)在將講述其中最為重要的幾個(gè)文件夾,但不會(huì)在上面花費(fèi)太多時(shí)間。 當(dāng)我們創(chuàng)造Potion插件時(shí),我們會(huì)逐一認(rèn)識(shí)它們的。
在我們繼續(xù)前進(jìn)之前,需要先確定一些用詞規(guī)范。
我將用"插件"表示一大堆做一系列相關(guān)事情的Vimscript代碼。 在Vim里,"插件(plugin)"有一個(gè)更專業(yè)的定義,它表示"`~/.vim/plugins/`下的一個(gè)文件"。
在大多數(shù)時(shí)間里,我將使用第一個(gè)定義。如果指的是第二個(gè)定義,我會(huì)特意指明。
## ~/.vim/colors/
Vim將會(huì)查找`~/.vim/colors/mycolors.vim`并執(zhí)行它。 這個(gè)文件應(yīng)該包括生成你的配色方案所需的一切Vimscript命令。
本書(shū)中,我們不會(huì)談到配色方案。如果想創(chuàng)造屬于自己的配色方案,你應(yīng)該從一個(gè)現(xiàn)存的配色方案上改造出來(lái)。 記住,`:help`將與你常在。
## ~/.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),所有打開(kāi)的緩沖區(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)。
不要擔(dān)心不懂什么是"編譯器相關(guān)選項(xiàng)"。我們等會(huì)會(huì)解釋。
## ~/.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í)上它的作用沒(méi)有聽(tīng)起來(lái)那么復(fù)雜。
簡(jiǎn)明扼要地說(shuō):`autoload`是一種延遲插件代碼到需要時(shí)才加載的方法。 我們將在重構(gòu)插件的時(shí)候詳細(xì)講解并展示它的用法。
## ~/.vim/doc/
最后,`~/.vim/doc/`文件夾提供了一個(gè)你可以放置你的插件的文檔的地方。 Vim對(duì)文檔的要求是多多益善(看看我們執(zhí)行過(guò)的所有`:help`命令就知道),所以為你的插件寫文檔是重要的。
## 練習(xí)
重讀本章。我沒(méi)開(kāi)玩笑。確保你(大體上)明白我們講過(guò)的每一個(gè)文件夾。
作為額外的加分,找一些你正在用的Vim插件看看它們?nèi)绾谓M織代碼文件。
- 前言
- 鳴謝
- 預(yù)備知識(shí)
- 打印信息
- 設(shè)置選項(xiàng)
- 基本映射
- 模式映射
- 精確映射
- Leaders
- 編輯你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 鍛煉你的手指
- 本地緩沖區(qū)的選項(xiàng)設(shè)置和映射
- 自動(dòng)命令
- 本地緩沖區(qū)縮寫
- 自動(dòng)命令組
- Operator-Pending映射
- 更多Operator-Pending映射
- 狀態(tài)條
- 負(fù)責(zé)任的編碼
- 變量
- 變量作用域
- 條件語(yǔ)句
- 比較
- 函數(shù)
- 函數(shù)參數(shù)
- 數(shù)字
- 字符串
- 字符串函數(shù)
- Execute命令
- Normal命令
- 執(zhí)行normal!
- 基本的正則表達(dá)式
- 實(shí)例研究:Grep 運(yùn)算符(Operator),第一部分
- 實(shí)例研究:Grep運(yùn)算符(Operator),第二部分
- 實(shí)例研究:Grep運(yùn)算符(Operator),第三部分
- 列表
- 循環(huán)
- 字典
- 切換
- 函數(shù)式編程
- 路徑
- 創(chuàng)建一個(gè)完整的插件
- 舊社會(huì)下的插件配置方式
- 新希望:用Pathogen配置插件
- 檢測(cè)文件類型
- 基本語(yǔ)法高亮
- 高級(jí)語(yǔ)法高亮
- 更高級(jí)的語(yǔ)法高亮
- 基本折疊
- 高級(jí)折疊
- 段移動(dòng)原理
- Potion段移動(dòng)
- 外部命令
- 自動(dòng)加載
- 文檔
- 發(fā)布
- 還剩下什么?
