我們需要講到的第一件事是如何配置我們的插件。在過去,這會是一次混亂的折騰, 但現在我們有一個工具可以非常方便地安裝Vim插件。
我們需要先過一下基本的配置方式,然后我們會講到如何省下麻煩。
## 基本配置方式
Vim支持把插件分割成多個文件。你可以在`~/.vim`下創建許多不同種類的文件夾來放置不同的內容。
我們現在將講述其中最為重要的幾個文件夾,但不會在上面花費太多時間。 當我們創造Potion插件時,我們會逐一認識它們的。
在我們繼續前進之前,需要先確定一些用詞規范。
我將用"插件"表示一大堆做一系列相關事情的Vimscript代碼。 在Vim里,"插件(plugin)"有一個更專業的定義,它表示"`~/.vim/plugins/`下的一個文件"。
在大多數時間里,我將使用第一個定義。如果指的是第二個定義,我會特意指明。
## ~/.vim/colors/
Vim將會查找`~/.vim/colors/mycolors.vim`并執行它。 這個文件應該包括生成你的配色方案所需的一切Vimscript命令。
本書中,我們不會談到配色方案。如果想創造屬于自己的配色方案,你應該從一個現存的配色方案上改造出來。 記住,`:help`將與你常在。
## ~/.vim/plugin/
`~/.vim/plugin/`下的文件將在_每次_Vim啟動的時候執行。 這里的文件包括那些無論何時,在啟動Vim之后你就想加載的代碼。
## ~/.vim/ftdetect/
`~/.vim/ftdetect/`下的文件在每次你啟動Vim的時候_也會_執行。
`ftdetect`是"filetype detection"的縮寫。 這里的文件_僅僅_負責啟動檢測和設置文件的`filetype`類型的自動命令。 這意味著它們一般不會超過一兩行。
## ~/.vim/ftplugin/
`~/.vim/ftplugin/`下的文件則各不相同。
一切皆取決于它的名字!當Vim把一個緩沖區的`filetype`設置成某個值時, 它會去查找`~/.vim/ftplugin/`下對應的文件。 比如:如果你執行`set filetype=derp`,Vim將查找`~/.vim/ftplugin/derp.vim`。 一旦文件存在,Vim將執行它。
Vim也支持在`~/.vim/ftplugin/`下放置文件夾。 再以我們剛才的例子為例:`set filetype=derp`將告訴Vim去執行`~/.vim/ftplugin/derp/`下的全部`*.vim`文件。 這使得你可以按代碼邏輯分割在`ftplugin`下的文件。
因為每次在一個緩沖區中執行`filetype`時都會執行這些文件,所以它們_只能_設置buffer-local選項! 如果在它們中設置了全局選項,所有打開的緩沖區的設置都會遭到覆蓋!
## ~/.vim/indent/
`~/.vim/indent/`下的文件類似于`ftplugin`下的文件。加載時也是只加載名字對應的文件。
`indent`文件應該設置跟對應文件類型相關的縮進,而且這些設置應該是buffer-local的。
是的,你當然可以把這些代碼也一并放入`ftplugin`文件, 但最好把它們獨立出來,讓其他Vim用戶理解你的意圖。這只是一種慣例,不過請盡量體貼用戶并遵從它。
## ~/.vim/compiler/
`~/.vim/compiler`下的文件非常類似于`indent`文件。它們應該設置同類型名的當前緩沖區下的編譯器相關選項。
不要擔心不懂什么是"編譯器相關選項"。我們等會會解釋。
## ~/.vim/after/
`~/.vim/after`文件夾有點神奇。這個文件夾下的文件會在每次Vim啟動的時候加載, 不過是在`~/.vim/plugin/`下的文件加載了_之后_。
這允許你覆蓋Vim的默認設置。實際上你將很少需要這么做,所以不用理它, 除非你有"Vim設置了選項`x`,但我想要不同的設置"的主意。
## ~/.vim/autoload/
`~/.vim/autoload`文件夾就更加神奇了。事實上它的作用沒有聽起來那么復雜。
簡明扼要地說:`autoload`是一種延遲插件代碼到需要時才加載的方法。 我們將在重構插件的時候詳細講解并展示它的用法。
## ~/.vim/doc/
最后,`~/.vim/doc/`文件夾提供了一個你可以放置你的插件的文檔的地方。 Vim對文檔的要求是多多益善(看看我們執行過的所有`:help`命令就知道),所以為你的插件寫文檔是重要的。
## 練習
重讀本章。我沒開玩笑。確保你(大體上)明白我們講過的每一個文件夾。
作為額外的加分,找一些你正在用的Vim插件看看它們如何組織代碼文件。
- 前言
- 鳴謝
- 預備知識
- 打印信息
- 設置選項
- 基本映射
- 模式映射
- 精確映射
- Leaders
- 編輯你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 鍛煉你的手指
- 本地緩沖區的選項設置和映射
- 自動命令
- 本地緩沖區縮寫
- 自動命令組
- Operator-Pending映射
- 更多Operator-Pending映射
- 狀態條
- 負責任的編碼
- 變量
- 變量作用域
- 條件語句
- 比較
- 函數
- 函數參數
- 數字
- 字符串
- 字符串函數
- Execute命令
- Normal命令
- 執行normal!
- 基本的正則表達式
- 實例研究:Grep 運算符(Operator),第一部分
- 實例研究:Grep運算符(Operator),第二部分
- 實例研究:Grep運算符(Operator),第三部分
- 列表
- 循環
- 字典
- 切換
- 函數式編程
- 路徑
- 創建一個完整的插件
- 舊社會下的插件配置方式
- 新希望:用Pathogen配置插件
- 檢測文件類型
- 基本語法高亮
- 高級語法高亮
- 更高級的語法高亮
- 基本折疊
- 高級折疊
- 段移動原理
- Potion段移動
- 外部命令
- 自動加載
- 文檔
- 發布
- 還剩下什么?