Vim 4 常用插件

Vim 系列教程目錄:

  • Vim 1 基本使用
  • Vim 2 高級用法
  • Vim 3 vimrc
  • Vim 4 常用插件
  • Vim 5 其他編輯器的 Vim 插件

Vim 插件網站

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

先說到哪里去找插件, 這里列出兩個網站:

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

在這些網站上找到合適的插件后, 就可以進行安裝了.

插件管理: vim-plug

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

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

安裝 vim-plug

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

在 vimrc 中配置

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

" 以 call plug#begin 開始, 這句命令后面的小括號里用于指定 其他插件的安裝目錄, 注意不要使用 'plugin' 這種默認名稱, 像我這樣的寫法就行
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() 結束
call plug#end()
復制代碼

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

插件的安裝, 移除, 升級

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

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

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

關于插件依賴的 Python

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

關于 Python 依賴, 有這么幾點需要確認:

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

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

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

主題

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

  • PaperColor
  • Dracula

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

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

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

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

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

啟用主題之后, 你會發現 Vim 變得漂亮多了, 果然人靠衣裝.

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

The NERD tree

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

常用命令

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

常用指令

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

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

配置

在 vimrc 中添加如下配置:

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

關于 CWD

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

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

repeat.vim

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

surround.vim

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

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

使用方法

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

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

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

除了 cs 指令, 還有一個 cS 指令, 給當前文本替換 surroundings 的時候, 會給當前文本單獨 分配一行, 并進行代碼格式化.

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

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

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

類似 cS, yS 也可以在給文本添加 surroundings 的時候給文本單獨分行并進行代碼格式化, 而 ySS 則可以給當前行添加 surroundings, 并且格式化

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

我的一些配置

寫文檔時, 在中英文混輸的情況下, 最好在英文單詞兩邊加上空格, 看著比較舒服, 也比較規范, 但是有時候經常忘記, 所以我定義了如下快捷鍵:

" 給單詞兩邊加上空格
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 這個插件, 這些指令也是可以使用 . 進行重復的, 很方便.

SuperTab

上古神器, 在插入模式下使用 Tab 鍵進行補全. 幫助文檔: help supertab

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

> 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, 當你再次輸入 b, 然后按 Tab 鍵, 會彈出一個候選列表幫你進行補全, 在補全列表出現后繼續按 Tab/Shift-Tab, 可以在候選詞中循環.

EasyMotion

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

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

<cursor>Lorem ipsum dolor sit amet.

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

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

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

CtrlP

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

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

常用快捷鍵

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

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

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

配置

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

小結

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279432.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279432.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279432.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[Windows編程] 通過GetModuleHandleEx 得到函數調用者所在的DLL/EXE 原創陳本峰2009-02

在有些情況下需要得到函數調用者的模塊名字。比如你想限制你的某個函數只能被自己某個特定的DLL調用。 或者比如在異常處理中你想了解是那個DLL/EXE拋出了異常。API函數_ReturnAddress 和GetModuleHandleEx 函數可以幫助我們達到這個目的。以下代碼演示它們的用法&#xff1a;v…

生信入門-愛課程上的華中農業大學

1.生物大分子序列分析 2.主要技術 3.生物信息學的應用 4.應用2 轉載于:https://www.cnblogs.com/BlueBlueSea/p/9610313.html

pc端文本_使用即將推出的Windows功能從PC發送文本

pc端文本Windows/Android/iPhone: Send and receive SMS messages on your PC, and access all the files on your phone without taking it out of your pocket. Windows / Android / iPhone&#xff1a;在PC上發送和接收SMS消息&#xff0c;并訪問手機上的所有文件&#xff0…

日常工作用到的正則

1、手機號碼加*"13422222222".replace(/(\d{3})\d{4}(\d{4})/, $1****$2);2、隱藏銀行卡號"1111111111111111111".replace(/^(\d{4})\d(\d{4})$/, **** **** **** $2); 1111111111111111.replace(/.(?.)/g, *);3、遇見大寫字母改為"_"component…

非常詳細的Exchange 功能路線圖

非常詳細的Exchange 功能路線圖 此路線圖可幫助您熟悉 Microsoft Exchange Server 2010 中的所有功能。第一部分列出了可通過 Exchange 管理控制臺 (EMC) 或 Exchange 命令行管理程序管理的所有功能。該部分還說明如何在 EMC 中導航至功能&#xff0c;并提供指向相應管理主題的…

String類常用方法

定義方法類型描述public String(char[] value)構造直接將一個字符數組變為一個字符串public String(char[] value,int offset,int count)構造將一個指定范圍的字符數組變為字符串public String(byte[] bytes)構造將一個byte數組全部變為字符串public String(byte[],bytes,int o…

python基礎一 day6 文件操作

讀寫只會進行兩步&#xff0c; r模式下寫讀 seek是按字節去找的 for line in f: for循環是一行一行的讀取出來 strip默認去空格和換行符 空格、制表符、換行符、回車、換頁垂直制表符和換行符稱為 “空白字符” for in 一個不可變數據類型&#xff0c;比如字符串&#xff0c;先…

靜態路由默認路由的配置

靜態路由實驗 負載均衡的一點是個人理解&#xff0c;有不正確之處歡迎批評指正。 R1配置: s0/0/0口&#xff1a;193.1.1.9/30(本地) next-hop 193.1.1.10/30 point-to-point link F0/0設置子接口&#xff1a;F0/0.1 172.17.115.1/24 VLAN1 F0/0.5 172.17.110…

r中匯率市場_如何在Word 2013表中匯總行和列

r中匯率市場If you’re working in Word and you need to total values in a table, you can do so without having to enter the data into Excel and then copy and paste it into Word. Word can do simple calculations such as summing, multiplying, and averaging. 如果…

solidity事件詳解

很多同學對Solidity 中的Event有疑問&#xff0c;這篇文章就來詳細的看看Solidity 中Event到底有什么用&#xff1f; 寫在前面 Solidity 是以太坊智能合約編程語言&#xff0c;閱讀本文前&#xff0c;你應該對以太坊、智能合約有所了解&#xff0c;如果你還不了解&#xff0c;建…

敏捷開發

敏捷開發是1990年逐漸引起人們廣泛關注的新型軟件開發方式,它是具有應對快速變化需求的軟件開發能力。相對于非敏捷開發&#xff0c;它是一種以客戶需求為核心&#xff0c;持續迭代&#xff0c;循序漸進的開發方式&#xff0c;敏捷絕非是一種特定的開發方式&#xff0c;而是一種…

MpAndroidChart源碼修改之餅狀圖添加標志線

由于項目需要,需要改MpandroidChart源碼,下面,先看下效果圖:效果圖效果很簡單,但是由于所選依賴庫沒提供相關方法,所以就需要重寫源碼了.這條紅色的標志線其實就是那個影廳的均值嘛,這條線看著是不是和圖表中的連接線很像呢,那把連接線稍加改造不就可以了嗎?下面,先看下此依賴…

數據同步云端本地_如何從云端刪除Windows 8的同步數據

數據同步云端本地The ability to sync data and settings between computers running Windows 8 is great, but it does mean that your information – possibly personal – is stored in the cloud. If you have changed your mind about syncing and want to remove your d…

前端roadmap

轉載于:https://www.cnblogs.com/cleverle/p/9615061.html

mysql 8+ 忘記root密碼 解決方案

在安裝完數據庫后&#xff0c;由于自己不小心直接關閉了安裝窗口&#xff0c;或者長時間沒有使用root用戶登錄系統&#xff0c;導致忘記了root密碼&#xff0c;這時就需要重置MySQL的root密碼。當然&#xff0c;最簡單方式自然是刪除數據庫的data目錄&#xff0c;然后重新安裝數…

安全領域應該關注的網站

http://www.freebuf.com/ https://www.seceye.cn/ https://zhuanlan.zhihu.com/c_118578260 https://www.easyaq.com/samesource/360.shtml http://bobao.360.cn/index/index https://www.sec-wiki.com/event

國內是否可以安裝alexa_Alexa可以聽到您無法聽到的命令,哪些黑客可以利用

國內是否可以安裝alexaYour smart speaker can hear sounds that humans can’t, meaning attackers could hypothetically trigger a command without you noticing. It’s happening in labs right now. 您的智能揚聲器可以聽到人類聽不到的聲音&#xff0c;這意味著攻擊者可…

為什么要使用React Hooks?(5分鐘實例)

前言 React Hooks在React v16.8正式穩定版中加入。 Hooks是什么? React Hooks 就是讓你不必寫class組件就可以用state和其他的React特性&#xff1b;你也可以編寫自己的hooks在不同的組件之間復用&#xff1b;最近很多人都在談論 React Hooks。當使用React類組件那么久&#x…

ActiveMQ在windows下啟動失敗解決方案

activemq.xml文件中的<transportConnectors><!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --><transportConnector name"openwire" uri"tcp://0.0.0.0:61616?maximumConnections1000&amp;wireForma…

jest忽略如何添加忽略_大多數人忽略的基本家庭維護任務

jest忽略如何添加忽略Owning a home requires a lot of responsibility, most notably regular maintenance to keep everything working great. However, there are a handful of very basic home maintenance tasks that you might be forgetting about. 擁有房屋需要承擔很多…