vim 個性化設置與功能擴展均通過 script 來實現,這種 script 又叫 plugin。plugin 是 vim 的核心與精髓。
最常用的配置文件 vimrc,也是一種 plugin。換句話說,所有的 plugin 都在配置 vim 的行為。
plugin 類型及其相互關系
常見的 plugin 類型:
- vimrc
- global
- filetype
- syntax
- compiler
vimrc 是核心 plugin (類似
main
函數),所有的配置都可以在這一個文件中完成。 所有其他配置都直接或間接由該文件調用以生效。
與其他編程語言一樣,為了提高源文件的可讀性,增加代碼的可重用性等, 衍生出了 global/filetype/syntax/compile 等 4 中主要的 plugin。
通過
runtime
,
source
等命令加載其他 plugin。
vim 搜索路徑
vim 通過路徑區分 plugin 類型。 由
runtimepath
控制搜索順序,一旦找到立即停止。
默認搜索順序:
-
$HOME/.vim: linux home 目錄下的用戶個性化設置 - `$VIMRUNTIME: 系統自帶的 plugin
建議將個性化配置全部放在
$HOME/.vim
中, 與 vim 自帶的配置文件隔離,方便備份。 vim 中執行
:echo $variable
查看變量取值.
查看默認 plugin 搜索路徑:
:set runtimepath?
runtimepath
=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/
vim73,
/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after
plugin 安裝
拷貝到對應的 plugin 目錄下即可。
更新幫助文檔,在 vim 中運行
:helptags ~/vimfiles/doc
global plugin
global plugin 位于
plugin
目錄下,對全局生效,所以默認自動加載。
filetype plugin
filetype plugin 只對特定類型的文件生效。
根據文件類型動態決定行為,通過事件監聽(autocmd)實現。 基本原理如下:
"
required
filetype plugin on
"
define behavior when filetype change to `tt`
"
here, the behavior is set to execute echo
"
hello
"
autocmd FileType tt
echo
"
hello
"
"
execute cmd below, output
"
hello
"
at the bottom of vim window
:set filetype=tt
如果沒有用 autocmd 顯式聲明 xxx 文件對應的行為, 則加載 ftplugin 目錄下的
xxx.vim
:set filetype=
c
"
expt: load c.vim and change highlight in c syntax
"
required: c.vim in ftplugin, it is in $VIMRUNTIME/ftplugin by default
注意:使用 ftplugin 時,需要開啟
filetype
和
filetype plugin
:filetype plugin on " 開啟 filetype 和 filetype plugin
:filetype " 查看狀態,輸出如下
filetype detection:ON plugin:ON indent:ON
一個更深入 filetype plugin 的例子
autocmd BufNewFile,BufRead *.xml source ~/.vim/ftplugin/xml.vim
同樣是事件監聽機制,區別在于:
- 監聽的事件: 創建或打開 .xml文件(BufNewFile,BufRead)
-
執行的行為: 加載
ftplugin/xml.vim
syntax plugin
原理與 ftplugin 類似,監聽 syntax 事件,加載 syntax 目錄下的插件。 觸發 filetype 事件的同時,也會觸發對應的 syntax 事件。
syntax on
:set syntax
=c
compile plugin
同樣是事件監聽,插件位于 compiler 目錄。
"
add below to vimrc
autocmd BufNewFile,BufRead *
.py compiler python`
"
open a file ending with .py and run
:
make
"
expt: errors printed
更多的一些細節
與 vi 的兼容性。
vim 在 vi 的基礎上進行了很多的功能擴展。 若要使用 vim 的特性,vim 必須運行于與 vi 不兼容的模式。
一般,把
set noncompaible
放在配置文件開始處即可。
ubuntu 12.04 默認的 vimrc 先加載 ubuntu.vim, 其中設置了該選項。
vim feature-list
vim 自身有很多 feature, plugin 都依賴于相應的 feature.
為了使 vimrc 通用,使用 plugin 前先用
has()
檢測feature 是否存在。 如下:
if
has(
"
syntax
"
)
syntax on
endif
:version
查看 feature-list
:version
VIM
- Vi IMproved
7.3
(
2010
Aug
15
, compiled May
4
2012
04
:
25
:
35
)
包含補丁:
1
-
429
修改者 pkg
-vim-
maintainers@lists.alioth.debian.org
編譯者 buildd@
巨型版本 無圖形界面。 可使用(
+)與不可使用(-
)的功能:
+arabic +autocmd -balloon_eval -browse ++builtin_terms +byte_offset +cindent -clientserver -clipboard +cmdline_compl +
cmdline_hist
+cmdline_info +comments +conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +
diff
+digraphs -dnd -ebcdic +emacs_tags +eval +
ex_extra
+extra_search +farsi +file_in_path +find_in_path +
float
+folding -footer +fork() +gettext -hangul_input +iconv +insert_expand +
jumplist
+keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape +
mouse_dec
+mouse_gpm -mouse_jsbterm +mouse_netterm -mouse_sysmouse +mouse_xterm +mouse_urxvt +multi_byte +multi_lang -mzscheme +
netbeans_intg
+path_extra -
perl
+persistent_undo +postscript +printer +profile +python -python3 +quickfix +reltime +rightleft -ruby +scrollbind +
signs
+smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white -tcl +terminfo +
termresponse
+textobjects +title -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore +wildmenu +
windows
+writebackup -X11 -xfontset -xim -xsmp -xterm_clipboard -
xterm_save
系統 vimrc 文件:
"
VIM/vimrc
"
用戶 vimrc 文件:
"
HOME/.vimrc
"
用戶 exrc 文件:
"
HOME/.exrc
"
VIM 預設值:
"
/usr/share/vim
"
編譯方式:
gcc
-c -I. -Iproto -DHAVE_CONFIG_H -g -O2 -fstack-protector --param=ssp-buffer-size=
4
-Wformat -Wformat-security -Werror=format-
s
ecurity
-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=
1
鏈接方式:
gcc
-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed -o vim -lm -ltinfo -lnsl -lselinux -lacl -lattr -lgpm -ldl -
L
/usr/lib/python2.
7
/config -lpython2.
7
-lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-
functions
請按 ENTER 或其它命令繼續
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

