Vim 4 常用插件

Vim 系列教程目錄:

Vim 插件網(wǎng)站

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

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

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

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

插件管理: vim-plug

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

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

安裝 vim-plug

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

在 vimrc 中配置

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

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

上面就是在 vimrc 中啟用 vim-plug, 以及配置其他插件的方式. 簡(jiǎn)單來(lái)講, 按照 VimAwesome 上給出的插件名寫(xiě)就行, 很簡(jiǎn)單.

插件的安裝, 移除, 升級(jí)

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

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

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

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

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

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

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

這說(shuō)明 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)中需要安裝了對(duì)應(yīng)的 Python 版本.
  3. 在命令模式下驗(yàn)證是否真的沒(méi)問(wèn)題. 例如 Vim 支持 Python3, 則在命令模式通過(guò) :py3 1 這個(gè)命令查看是否真的可以. py3 是 Vim 調(diào)用 Python 時(shí)使用的命令, 后面的 1 是此命令的參數(shù)(可以是任意參數(shù)), 如果不報(bào)錯(cuò), 則說(shuō)明系統(tǒng)中有對(duì)應(yīng)的 Python 版本.

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

主題

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

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

PaperColor 有個(gè)很好的地方: 同時(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

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

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

The NERD tree

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

常用命令

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

常用指令

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

指令 含義 備注
o 打開(kāi)文件/目錄/書(shū)簽 如果是在目錄上, 則是打開(kāi)或關(guān)閉
i/s 在新窗口/垂直新窗口打開(kāi)文件 針對(duì)文件的命令
t 在新標(biāo)簽打開(kāi)目錄/書(shū)簽 如果是目錄, 則自動(dòng)打開(kāi)一個(gè)新的 NERDTree
m 顯示 NERDTree 菜單 菜單中可以選擇添加/刪除/修改文件或目錄
O 遞歸打開(kāi)當(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 針對(duì) Bookmark 的命令
r 刷新當(dāng)前目錄
q 關(guān)閉當(dāng)前 NERDTree

配置

在 vimrc 中添加如下配置:

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

關(guān)于 CWD

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

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

repeat.vim

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

surround.vim

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

下文我簡(jiǎn)單介紹下其用法, 我會(huì)將成對(duì)的符號(hào)稱為 "surroundings", 這也是官方文檔中的稱呼

使用方法

  1. 刪除 surroundings
    指令為 ds (Delete Surroudings), 可以將文本兩邊的 surroundings 刪掉, 用法為 ds<surrounding>,
    看下面幾個(gè)例子(星號(hào)表示光標(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 這個(gè)指令中, t 是個(gè)文本對(duì)象, a tag, surround 中的文本對(duì)象和 Vim 中的一致.

  1. 改變 surroundings
    指令為 cs (Change Surroundings), 可以改變文本兩邊的 surroundings, 用法為: cs<old surrounding><new surrouding>,
    下面給出幾個(gè)例子:
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 指令, 還有一個(gè) cS 指令, 給當(dāng)前文本替換 surroundings 的時(shí)候, 會(huì)給當(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 的做法

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

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)入可視模式, 接下來(lái)按 S<surrounding> 可以給選中的文本添加 surroundings

我的一些配置

寫(xiě)文檔時(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 這個(gè)插件, 這些指令也是可以使用 . 進(jìn)行重復(fù)的, 很方便.

SuperTab

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

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

> 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').

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

EasyMotion

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

這里簡(jiǎn)單介紹一下用法: 加入你想找到下面這句話中的 amet 這個(gè)單詞上:

<cursor>Lorem ipsum dolor sit amet.

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

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

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

CtrlP

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

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

常用快捷鍵

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

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

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

配置

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

小結(jié)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容