Vim 4 常用插件

Vim 系列教程目錄:

Vim 插件網(wǎng)站

Vim 之所以強(qiáng)大, 有個很大的原因就是他有豐富的插件. 插件可以極大地增強(qiáng) Vim 的功能. 那么去哪里下載插件呢? 插件怎么安裝和管理呢, 聽我慢慢道來.

先說到哪里去找插件, 這里列出兩個網(wǎng)站:

  • 官方插件網(wǎng)址 界面丑, 速度慢, 有時(shí)候還打不開, 不建議使用...
  • VimAwesome 比較推薦的一個插件網(wǎng)站, 好看好用, 每個插件都有介紹, 還有安裝方式說明, 以及每個插件官網(wǎng)的鏈接.

在這些網(wǎng)站上找到合適的插件后, 就可以進(jìn)行安裝了. 我后面會介紹幾個插件, 你可以到 VimAwesome 上自行查找.

插件管理: vim-plug

Vim 本身就提供了安裝和管理插件的方式, 但是不太方便, 我就不多說了. 現(xiàn)在比較流行的方式有兩種: vim-plug 和 Vundle, 這兩款插件都是用于"安裝和管理別的插件"的插件.

我最近在用的是 vim-plug, 下面介紹一下它的用法.

安裝 vim-plug

安裝方式很簡單, 下載 plug.vim, 放在 $VIM/vim81/autoload/ 目錄中, 就算是完成安裝了. 注意: 這里說是下載安裝, 其實(shí)就是把該插件的源代碼保存到名為 plug.vim 的文件, 然后放在對應(yīng)的目錄里就可以了. 官方還提供了使用命令的方式下載安裝, 但其實(shí)還不如手動下載來得方便.

在 vimrc 中配置

安裝好 vim-plug 后, 需要在 vimrc 中進(jìn)行啟用配置和插件配置, 方式如下:

" 以 call plug#begin 開始, 這句命令后面的小括號里用于指定 其他插件的安裝目錄, 注意不要使用 'plugin' 這種默認(rèn)名稱, 像我這樣的寫法就行
call plug#begin('$VIM/vimfiles/vim-plug')
" 配置插件, 方式有三種: 
" 1. 插件的短別名(即 Github 中的 用戶名/倉庫名), 2. 插件的 Github 倉庫地址, 3. 本地路徑
Plug 'altercation/vim-colors-solarized'
Plug 'nlknguyen/papercolor-theme'
Plug 'scrooloose/nerdtree'
" 以 call plug#end() 結(jié)束
call plug#end()

上面就是在 vimrc 中啟用 vim-plug, 以及配置其他插件的方式. 簡單來講, 按照 VimAwesome 上給出的插件名寫就行, 很簡單.

插件的安裝, 移除, 升級

在 vimrc 中配置好插件之后, 需要使用 vim-plug 的命令進(jìn)行安裝, vim-plug 提供了如下命令, 你可以在命令模式下使用這些命令:

  • :PlugInstall 安裝所有插件. 注意: 要安裝插件, 需要先在 vimrc 中配置插件名稱, 然后執(zhí)行這個安裝命令
  • :PlugClean 移除無用插件. 要移除插件, 需要先在 vimrc 中把要移除的插件名稱刪掉, 然后執(zhí)行這個移除命令
  • :PlugUpdate 升級所有插件
  • :PlugUpgrade 升級 vim-plug 本身
  • :PlugStatus 查看插件狀態(tài)

OK, vim-plug 的使用就是這么簡單. 具體更加細(xì)節(jié)的配置可以參考官方文檔, 這里不再贅述.

關(guān)于插件依賴的 Python

有些插件需要依賴 Python (比如 UltiSnip), 如果你裝了這樣的插件, 但是你的 Vim 卻不支持 Python, 啟動時(shí)就會報(bào)錯(你可以繼續(xù)使用 Vim, 但是看到報(bào)錯會很煩).

關(guān)于 Python 依賴, 有這么幾點(diǎn)需要確認(rèn):

  1. 確認(rèn) Vim 本身支持調(diào)用 Python. 通過 :version 命令, 可以看到 Vim 的版本信息以及支持的特性信息, 如果你能看到如下信息, 則說明 Vim 支持調(diào)用 Python:
+python/dyn
+python3/dyn
  1. 確認(rèn) Vim 支持的 Python 版本, 同樣使用 version 命令查看, 在此命令輸出的最下面可以看到如下信息:
-DDYNAMIC_PYTHON_DLL=\"python27.dll\"
-DDYNAMIC_PYTHON3_DLL=\"python36.dll\"

這說明 Vim 支持 Python 2.7 和 Python 3.6

  1. 32位的 Vim 只能調(diào)用 32 位的 Python, 同理, 64位的 Vim 只能調(diào)用 64位的 Python, 要查看 Vim 的版本, 還是使用 version 命令.
  2. 系統(tǒng)中需要安裝了對應(yīng)的 Python 版本.
  3. 在命令模式下驗(yàn)證是否真的沒問題. 例如 Vim 支持 Python3, 則在命令模式通過 :py3 1 這個命令查看是否真的可以. py3 是 Vim 調(diào)用 Python 時(shí)使用的命令, 后面的 1 是此命令的參數(shù)(可以是任意參數(shù)), 如果不報(bào)錯, 則說明系統(tǒng)中有對應(yīng)的 Python 版本.

我所使用的 Vim8.1 是 32 位版本, 我之前電腦里裝了64位的 3.7, 結(jié)果報(bào)錯, 改為 32 位的 3.6 就沒問題了.

主題

主題的話, 這里推薦兩款我比較喜歡的主題:

其中 PagerColor 是亮色主題, Dracula 是暗色主題.

PaperColor 有個很好的地方: 同時(shí)支持亮色和暗色模式. 可在 vimrc 中做如下配置:

Plug 'nlknguyen/papercolor-theme'
" 啟用亮色主題
set background=light
colorscheme PaperColor
" 啟用暗色主題
" set background=dark
" colorscheme PaperColor

Dracula 是我比較喜歡的一款深色主題, 在 vimrc 中配置的時(shí)候要注意:

" 后面的配置表示把 dracula 主題放在 dracula 目錄下
Plug 'dracula/vim', { 'as': 'dracula' }
" 啟用主題
colorscheme dracula

啟用主題之后, 你會發(fā)現(xiàn) Vim 變得漂亮多了, 果然人靠衣裝.

下面我再介紹一些基本的, 通用的插件.

The NERD tree

目錄樹插件, 上古神器, 這么多年來一直還在更新, 不容易. 安裝就不說了, 自己參照 Awesome 上的名字進(jìn)行配置即可. 幫助文檔: help NERDTree

常用命令

命令 含義 備注
:NERDTree [dir/bookmark] 打開 NERDTree 后面可以跟目錄/書簽作為參數(shù)
:NERDTreeToggle 打開/關(guān)閉 NERDTree
:NERDTreeMirror 將當(dāng)前的 NERDTree 共享到另一個 NERDTree, 二者是同一個 buffer, 互相同步 首先得有另一個 NERDTree
:Bookmark [name] 將當(dāng)前節(jié)點(diǎn)保存為書簽, 可以指定名稱 必須在 NERDTree 中才可以使用
:ClearBookmark [name] 刪除書簽, 如果不給名稱, 則刪除當(dāng)前節(jié)點(diǎn)對應(yīng)書簽 同上
:EditBookmark 編輯所有書簽 同上

常用指令

以下指令都需要在 NERDTree 中才能生效

指令 含義 備注
o 打開文件/目錄/書簽 如果是在目錄上, 則是打開或關(guān)閉
i/s 在新窗口/垂直新窗口打開文件 針對文件的命令
t 在新標(biāo)簽打開目錄/書簽 如果是目錄, 則自動打開一個新的 NERDTree
m 顯示 NERDTree 菜單 菜單中可以選擇添加/刪除/修改文件或目錄
O 遞歸打開當(dāng)前節(jié)點(diǎn)
x 關(guān)閉當(dāng)前節(jié)點(diǎn)的父目錄
X 遞歸關(guān)閉當(dāng)前節(jié)點(diǎn)直到最上層目錄
D 刪除當(dāng)前 Bookmark 針對 Bookmark 的命令
r 刷新當(dāng)前目錄
q 關(guān)閉當(dāng)前 NERDTree

配置

在 vimrc 中添加如下配置:

" 顯示隱藏文件
let NERDTreeShowHidden=1
" 顯示書簽
let NERDTreeShowBookmarks=1
" NERDTree 大小改為 45 字符寬度, 默認(rèn) 31
let NERDTreeWinSize=45
" 顯示簡寫的 NERDTree 菜單
let NERDTreeMinimalMenu=1
" 設(shè)置箭頭樣式
let g:NERDTreeDirArrowExpandable='?'
let g:NERDTreeDirArrowCollapsible='?'
" 刪除文件時(shí)自動刪除文件對應(yīng) buffer
let NERDTreeAutoDeleteBuffer=1
" <leader>h 切換顯示
nnoremap <leader>h :NERDTreeToggle<cr>

關(guān)于 CWD

前面我們介紹過 CWD(Current Working Directory), 當(dāng)前工作目錄. NERDTree 是很依賴 CWD的, 當(dāng)你打開 NERDTree 的時(shí)候, NERDTree 會自動以 CWD 作為根目錄顯示文件目錄. 使用 :NERDTree 命令時(shí), 你可以指定一個目錄作為參數(shù), 那么此時(shí)這個目錄就是 CWD. 如果你不指定目錄參數(shù), 則 CWD 就是用戶目錄.

在 NERDTree 中, 可以在某個目錄節(jié)點(diǎn)上使用 cd 指令, 將 CWD 更改為指定目錄. 不過有時(shí)候使用 cd 指令更改 CWD 會導(dǎo)致一些奇怪的問題, 比如 NERDTree 失效了, 此時(shí)可以使用 :NERDTree 命令來重啟 NERDTree.

repeat.vim

. 這個指令只能重復(fù) Vim 原生的上次指令, 如果是自己映射的指令或是插件映射的指令, 是無法重復(fù)的. repeat.vim 就是用來解決這個問題的. 無需配置, 裝上就能用了, 雖然用處不大, 但是聊勝于無.

surround.vim

上古神器, 可以快速地給文本兩邊添加成對的符號, 如 ([{" 等等. 幫助文檔: help surround

下文我簡單介紹下其用法, 我會將成對的符號稱為 "surroundings", 這也是官方文檔中的稱呼

使用方法

  1. 刪除 surroundings
    指令為 ds (Delete Surroudings), 可以將文本兩邊的 surroundings 刪掉, 用法為 ds<surrounding>,
    看下面幾個例子(星號表示光標(biāo)的位置):
Old Text command New Text
"Hello *world!" ds" Hello *world
(123+4*56)/2 ds) 123+4*56/2
<div>Yo!*</div> dst Yo!*

注意, dst 這個指令中, t 是個文本對象, a tag, surround 中的文本對象和 Vim 中的一致.

  1. 改變 surroundings
    指令為 cs (Change Surroundings), 可以改變文本兩邊的 surroundings, 用法為: cs<old surrounding><new surrouding>,
    下面給出幾個例子:
Old text Command New text ~
"Hello *world!" cs"' 'Hello world!'
"Hello *world!" cs"<q> <q>Hello world!</q>
(123+4*56)/2 cs)] [123+456]/2
(123+4*56)/2 cs)[ [ 123+456 ]/2
<div>Yo!*</div> cst<p> <p>Yo!</p>

除了 cs 指令, 還有一個 cS 指令, 給當(dāng)前文本替換 surroundings 的時(shí)候, 會給當(dāng)前文本單獨(dú)
分配一行, 并進(jìn)行代碼格式化.

  1. 添加 surroundings
    指令為 ys (You Surroundings), 給文本添加 surroundings, 用法為 ys<text object><surrounding>,
    下面給出一些例子:
Old text Command New text ~
Hello w*orld! ysiw) Hello (world)!
Ti*tle ysiw<h1> <h1>Title</h1>
很Geek的做法 ysiw<space><space> 很 Geek 的做法

有一個特殊指令: yss, 可以對當(dāng)前行添加 surroundings, 添加時(shí)自動忽略兩邊的空格:

Old text Command New text ~
Hello w*orld! yssB {Hello world!}

類似 cS, yS 也可以在給文本添加 surroundings 的時(shí)候給文本單獨(dú)分行并進(jìn)行代碼格式化,
ySS 則可以給當(dāng)前行添加 surroundings, 并且格式化

  1. 可視模式指令
    按 v 進(jìn)入可視模式, 接下來按 S<surrounding> 可以給選中的文本添加 surroundings

我的一些配置

寫文檔時(shí), 在中英文混輸?shù)那闆r下, 最好在英文單詞兩邊加上空格, 看著比較舒服, 也比較規(guī)范, 但是有時(shí)候經(jīng)常忘記, 所以我定義了如下快捷鍵:

" 給單詞兩邊加上空格
nmap <leader><space><space> ysiw<space><space>
" 給單詞左邊加上空格
nmap <leader><space>h wbi<space><esc>w
" 給單詞右邊加上空格
nmap <leader><space>l ea<space><esc>b

這些配置依賴 surround.vim, 所以要先裝插件. 另外, 有了 repeat.vim 這個插件, 這些指令也是可以使用 . 進(jìn)行重復(fù)的, 很方便.

SuperTab

上古神器, 在插入模式下使用 Tab 鍵進(jìn)行補(bǔ)全. 幫助文檔: help supertab

用法其實(shí)很簡單, 這里給一個文檔中的例子:

> Example ('|' denotes the cursor location):  
> bar  
> baz  
> b|`<Tab>`    Hitting `<Tab>` here will start the completion, allowing you to  
>           then cycle through the suggested words ('bar' and 'baz').

意思就是說, 你先輸入過 bar, 又輸入過 baz, 當(dāng)你再次輸入 b, 然后按 Tab 鍵, 會彈出一個候選列表幫你進(jìn)行補(bǔ)全, 在補(bǔ)全列表出現(xiàn)后繼續(xù)按 Tab/Shift-Tab, 可以在候選詞中循環(huán).

EasyMotion

上古神器, 是對 Vim 移動指令的增強(qiáng). 幫助文檔: help easymotion

這里簡單介紹一下用法: 加入你想找到下面這句話中的 amet 這個單詞上:

<cursor>Lorem ipsum dolor sit amet.

<cursor> 表示你現(xiàn)在光標(biāo)的所在處, 你需要輸入四次 w. 但是使用 EasyMotion 的話, 你可以使用這個指令: <leader><leader>w, 你會發(fā)現(xiàn)每個單詞的首字母都被高亮成一個新的不重復(fù)的字母了, 你直接按被高亮的那個字母, 就可以跳過去了.

同樣的, 如果你想跳到某一個出現(xiàn)字母 o 的地方, 你可以使用 <leader><leader>fo, 那么所有字母o都被高亮成新的字母了, 你直接按下高亮的字母就可以跳過去了.

你試試就知道我的意思了.

CtrlP

上古神器, 用于查找 Buffer, 文件列表, 最近使用文件等, 現(xiàn)在還在緩慢更新, 這幾年慢慢的被 fzf 代替了, 但是由于 fzf 配置比較麻煩, 現(xiàn)在我暫時(shí)還用 CtrlP. 幫助文檔: help CtrlP

用法很簡單, 按快捷鍵 Ctrl-p 可在 Vim 底部打開一個窗口, 然后你可以輸入文件名中的字符, CtrlP 會進(jìn)行模糊匹配查找.

常用快捷鍵

下面給出幾個常用快捷鍵, 注意下面的快捷鍵都只能在 CtrlP 的窗口中使用:

快捷鍵 功能 備注
Ctrl-j/k 在文件列表中上下移動
Ctrl-f/Ctrl-b 切換到下一個/上一個搜索模式 搜索模式有三個: Buffer, 文件目錄, MRU(最近最常使用)
Ctrl-c 關(guān)閉 CtrlP
F7 在 CtrlP 面板中刪除光標(biāo)所在條目(buffer, mru)
Ctrl-s/Ctrl-v 在水平/垂直的分割窗口中打開文件
Ctrl-t 在新 tab 中打開文件

注意: CtrlP 也很依賴 CWD, 它列出文件目錄中的文件時(shí), 也是 CWD 下的文件.

配置

" 默認(rèn)使用緩沖區(qū)搜索模式打開 CtrlP
let g:ctrlp_cmd='CtrlPBuffer'
" 將為多字節(jié)字符開啟輸入事件循環(huán), 用于解決中文文件名的問題(實(shí)驗(yàn)特性)
let g:ctrlp_key_loop= 1
" CtrlP 窗口最大高度和最小高度都是 10, 即固定大小
let g:ctrlp_match_window='min:10,max:10'

小結(jié)

本節(jié)介紹了幾個常用的插件, 都是很基本和通用的, 不涉及到具體編程語言, 有了它們, 會讓你的 Vim 用起來更舒服.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恭理,一起剝皮案震驚了整個濱河市哨啃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苗桂,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寨昙,死亡現(xiàn)場離奇詭異豫尽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)光羞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怀大,“玉大人纱兑,你說我怎么就攤上這事』瑁” “怎么了潜慎?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蓖康。 經(jīng)常有香客問我铐炫,道長,這世上最難降的妖魔是什么蒜焊? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任倒信,我火速辦了婚禮,結(jié)果婚禮上泳梆,老公的妹妹穿的比我還像新娘鳖悠。我一直安慰自己榜掌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布乘综。 她就那樣靜靜地躺著憎账,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瘾带。 梳的紋絲不亂的頭發(fā)上鼠哥,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天熟菲,我揣著相機(jī)與錄音看政,去河邊找鬼。 笑死抄罕,一個胖子當(dāng)著我的面吹牛允蚣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呆贿,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼嚷兔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了做入?” 一聲冷哼從身側(cè)響起冒晰,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎竟块,沒想到半個月后壶运,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浪秘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年蒋情,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耸携。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡棵癣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夺衍,到底是詐尸還是另有隱情狈谊,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布沟沙,位于F島的核電站河劝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尝胆。R本人自食惡果不足惜丧裁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望含衔。 院中可真熱鬧煎娇,春花似錦二庵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哟绊,卻和暖如春因妙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背票髓。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工攀涵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洽沟。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓以故,卻偏偏與公主長得像,于是被迫代替她去往敵國和親裆操。 傳聞我的和親對象是個殘疾皇子怒详,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345