過這 5 個插件擴展 Vim 功能來提升你的編碼效率。
-- Ricardo Gerardi
我用 Vim 已經(jīng)超過 20 年了,兩年前我決定把它作為我的首要文本編輯器。我用 Vim 來編寫代碼、配置文件、博客文章及其它任意可以用純文本表達的東西。Vim 有很多超級棒的功能,一旦你適合了它,你的工作會變得非常高效。
在日常編輯工作中,我更傾向于使用 Vim 穩(wěn)定的原生功能,但開源社區(qū)對 Vim 開發(fā)了大量的插件,可以擴展 Vim 的功能、改進你的工作流程和提升工作效率。
以下列舉 5 個非常好用的可以用于編寫任意編程語言的插件。
Auto Pairs 插件可以幫助你插入和刪除成對的文字,如花括號、圓括號或引號。這在編寫代碼時非常有用,因為很多編程語言都有成對標記的語法,就像圓括號用于函數(shù)調(diào)用,或引號用于字符串定義。
Auto Pairs 最基本的功能是在你輸入一個左括號時會自動補全對應的另一半括號。比如,你輸入了一個 [,它會自動幫你補充另一半 ]。相反,如果你用退格鍵刪除開頭的一半括號,Auto Pairs 會刪除另一半。
如果你設置了自動縮進,當你按下回車鍵時 Auto Pairs 會在恰當?shù)目s進位置補全另一半括號,這比你找到放置另一半的位置并選擇一個正確的括號要省勁多了。
例如下面這段代碼:
package main
import "fmt"
func main() {
x :=true
items :=[]string{"tv", "pc", "tablet"}
if x {
for _, i :=range items
}
}
在 items 后面輸入一個左花括號按下回車會產(chǎn)生下面的結(jié)果:
package main
import "fmt"
func main() {
x :=true
items :=[]string{"tv", "pc", "tablet"}
if x {
for _, i :=range items {
| (cursor here)
}
}
}
Auto Pairs 提供了大量其它選項(你可以在 GitHub 上找到),但最基本的功能已經(jīng)很讓人省時間了。
NERD Commenter 插件給 Vim 增加了代碼注釋的功能,類似在 IDE(integrated development environment) 中注釋功能。有了這個插件,你可以一鍵注釋單行或多行代碼。
NERD Commenter 可以與標準的 Vim filetype 插件配合,所以它能理解一些編程語言并使用合適的方式來注釋代碼。
最易上手的方法是按 Leader+Space 組合鍵來切換注釋當前行。Vim 默認的 Leader 鍵是 \。
在 可視化模式(Visual mode)中,你可以選擇多行一并注釋。NERD Commenter 也可以按計數(shù)注釋,所以你可以加個數(shù)量 n 來注釋 n 行。
還有個有用的特性 “Sexy Comment” 可以用 Leader+cs 來觸發(fā),它的塊注釋風格更漂亮一些。例如下面這段代碼:
package main
import "fmt"
func main() {
x :=true
items :=[]string{"tv", "pc", "tablet"}
if x {
for _, i :=range items {
fmt.Println(i)
}
}
}
選擇 main 函數(shù)中的所有行然后按下 Leader+cs 會出來以下注釋效果:
package main
import "fmt"
func main() {
/*
* x :=true
* items :=[]string{"tv", "pc", "tablet"}
*
* if x {
* for _, i :=range items {
* fmt.Println(i)
* }
* }
*/
}
因為這些行都是在一個塊中注釋的,你可以用 Leader+Space 組合鍵一次去掉這里所有的注釋。
NERD Commenter 是任何使用 Vim 寫代碼的開發(fā)者都必裝的插件。
Vim Surround 插件可以幫你“環(huán)繞”現(xiàn)有文本插入成對的符號(如括號或雙引號)或標簽(如 HTML 或 XML 標簽)。它和 Auto Pairs 有點兒類似,但是用于處理已有文本,在編輯文本時更有用。
比如你有以下一個句子:
"Vim plugins are awesome !"
當你的光標處于引起來的句中任何位置時,你可以用 ds" 組合鍵刪除句子兩端的雙引號。
Vim plugins are awesome !
你也可以用 cs"' 把雙端的雙引號換成單引號:
'Vim plugins are awesome !'
或者再用 cs'[ 替換成中括號:
[ Vim plugins are awesome ! ]
它對編輯 HTML 或 XML 文本中的 標簽(tag)尤其在行。假如你有以下一行 HTML 代碼:
<p>Vim plugins are awesome !</p>
當光標在 “awesome” 這個單詞的任何位置時,你可以按 ysiw<em> 直接給它加上著重標簽(<em>):
<p>Vim plugins are <em>awesome</em> !</p>
注意它聰明地加上了 </em> 閉合標簽。
Vim Surround 也可以用 ySS 縮進文本并加上標簽。比如你有以下文本:
<p>Vim plugins are <em>awesome</em> !</p>
你可以用 ySS<div class="normal"> 加上 div 標簽,注意生成的段落是自動縮進的。
<div class="normal">
<p>Vim plugins are <em>awesome</em> !</p>
</div>
Vim Surround 有很多其它選項,你可以參照 GitHub 上的說明嘗試它們。
Vim Gitgutter 插件對使用 Git 作為版本控制工具的人來說非常有用。它會在 Vim 的行號列旁顯示 git diff 的差異標記。假設你有如下已提交過的代碼:
1 package main
2
3 import "fmt"
4
5 func main() {
6 x :=true
7 items :=[]string{"tv", "pc", "tablet"}
8
9 if x {
10 for _, i :=range items {
11 fmt.Println(i)
12 }
13 }
14 }
當你做出一些修改后,Vim Gitgutter 會顯示如下標記:
1 package main
2
3 import "fmt"
4
_ 5 func main() {
6 items :=[]string{"tv", "pc", "tablet"}
7
~ 8 if len(items) > 0 {
9 for _, i :=range items {
10 fmt.Println(i)
+ 11 fmt.Println("------")
12 }
13 }
14 }
_ 標記表示在第 5 行和第 6 行之間刪除了一行。~ 表示第 8 行有修改,+ 表示新增了第 11 行。
另外,Vim Gitgutter 允許你用 [c 和 ]c 在多個有修改的塊之間跳轉(zhuǎn),甚至可以用 Leader+hs 來暫存某個變更集。
這個插件提供了對變更的即時視覺反饋,如果你用 Git 的話,有了它簡直是如虎添翼。
Vim Fugitive 是另一個將 Git 工作流集成到 Vim 中的超棒插件。它對 Git 做了一些封裝,可以讓你在 Vim 里直接執(zhí)行 Git 命令并將結(jié)果集成在 Vim 界面里。這個插件有超多的特性,更多信息請訪問它的 GitHub 項目頁面。
這里有一個使用 Vim Fugitive 的基礎 Git 工作流示例。設想我們已經(jīng)對下面的 Go 代碼做出修改,你可以用 :Gblame 調(diào)用 git blame 來查看每行最后的提交信息:
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 1 package main
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 2
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 3 import "fmt"
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 4
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│_ 5 func main() {
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 6 items :=[]string{"tv", "pc", "tablet"}
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 7
00000000 (Not Committed Yet 2018-12-05 18:55:00 -0500)│~ 8 if len(items) > 0 {
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 9 for _, i :=range items {
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 10 fmt.Println(i)
00000000 (Not Committed Yet 2018-12-05 18:55:00 -0500)│+ 11 fmt.Println("------")
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 12 }
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 13 }
e9949066 (Ricardo Gerardi 2018-12-05 18:17:19 -0500)│ 14 }
可以看到第 8 行和第 11 行顯示還未提交。用 :Gstatus 命令檢查倉庫當前的狀態(tài):
1 # On branch master
2 # Your branch is up to date with 'origin/master'.
3 #
4 # Changes not staged for commit:
5 # (use "git add <file>..." to update what will be committed)
6 # (use "git checkout -- <file>..." to discard changes in working directory)
7 #
8 # modified: vim-5plugins/examples/test1.go
9 #
10 no changes added to commit (use "git add" and/or "git commit -a")
--------------------------------------------------------------------------------------------------------
1 package main
2
3 import "fmt"
4
_ 5 func main() {
6 items :=[]string{"tv", "pc", "tablet"}
7
~ 8 if len(items) > 0 {
9 for _, i :=range items {
10 fmt.Println(i)
+ 11 fmt.Println("------")
12 }
13 }
14 }
Vim Fugitive 在分割的窗口里顯示 git status 的輸出結(jié)果。你可以在該行按下 - 鍵用該文件的名字暫存這個文件的提交,再按一次 - 可以取消暫存。這個信息會隨著你的操作自動更新:
1 # On branch master
2 # Your branch is up to date with 'origin/master'.
3 #
4 # Changes to be committed:
5 # (use "git reset HEAD <file>..." to unstage)
6 #
7 # modified: vim-5plugins/examples/test1.go
8 #
--------------------------------------------------------------------------------------------------------
1 package main
2
3 import "fmt"
4
_ 5 func main() {
6 items :=[]string{"tv", "pc", "tablet"}
7
~ 8 if len(items) > 0 {
9 for _, i :=range items {
10 fmt.Println(i)
+ 11 fmt.Println("------")
12 }
13 }
14 }
現(xiàn)在你可以用 :Gcommit 來提交修改了。Vim Fugitive 會打開另一個分割窗口讓你輸入提交信息:
1 vim-5plugins: Updated test1.go example file
2 # Please enter the commit message for your changes. Lines starting
3 # with '#' will be ignored, and an empty message aborts the commit.
4 #
5 # On branch master
6 # Your branch is up to date with 'origin/master'.
7 #
8 # Changes to be committed:
9 # modified: vim-5plugins/examples/test1.go
10 #
按 :wq 保存文件完成提交:
[master c3bf80f] vim-5plugins: Updated test1.go example file
1 file changed, 2 insertions(+), 2 deletions(-)
Press ENTER or type command to continue
然后你可以再用 :Gstatus 檢查結(jié)果并用 :Gpush 把新的提交推送到遠程。
1 # On branch master
2 # Your branch is ahead of 'origin/master' by 1 commit.
3 # (use "git push" to publish your local commits)
4 #
5 nothing to commit, working tree clean
Vim Fugitive 的 GitHub 項目主頁有很多屏幕錄像展示了它的更多功能和工作流,如果你喜歡它并想多學一些,快去看看吧。
這些 Vim 插件都是程序開發(fā)者的神器!還有另外兩類開發(fā)者常用的插件:自動完成插件和語法檢查插件。它些大都是和具體的編程語言相關的,以后我會在一些文章中介紹它們。
你在寫代碼時是否用到一些其它 Vim 插件?請在評論區(qū)留言分享。
via: https://opensource.com/article/19/1/vim-plugins-developers
作者: Ricardo Gerardi 選題: lujun9972 譯者: pityonline 校對: wxy
本文由 LCTT 原創(chuàng)編譯, Linux中國 榮譽推出
im 是 Linux 下的常用文本編輯器,但也經(jīng)常被稱為是一個上古神器,因為它對于初學者而言相當不友好,也不好入門。
但是,對于高手而言,他們不僅將 Vim 玩得很溜,而且還將它當作代碼開發(fā)的主要工具。為什么?因為 VS 等 IDE 比較龐大,運行起來比較慢,而 Vim 就相當輕量了,瞬間就能打開代碼并開始工作,這對于追求效率的高手而言自然是愛不釋手。
但是,如果是官方版的 Vim ,依然是局限性相當大,十分不方便。但是高手畢竟是高手,高手懂得使用插件。下面良許就介紹高手常用的 3 個很實用的插件。
這個插件叫 Auto Pairs ,它可以自動補全配對的符號,比如:花括號、方括號、圓括號、引號等。這對于我們程序員而言非常有用,因為在代碼里我們大量使用到了上述的幾種配對符號,如果能自動補全那將很大提高我們的寫 bug 效率。
使用這個插件后,當我們敲入一個符號時,會自動補全它的所匹配的另一個符號。比如,我們敲入 [ 時,它會自動補全 ] 。當我們刪掉 [ 時,] 也自動被刪除了。
如果我們開啟了自動縮進,那么它不僅會在合適的位置補全匹配的符號,還會將光標插入到合適的位置。比如下面這段 Go 代碼:
package main
import "fmt"
func main() {
x :=true
items :=[]string{"tv", "pc", "tablet"}
if x {
for _, i :=range items
}
}
現(xiàn)在,我在倒數(shù)第 3 行 items 后面插入一個花括號 { ,然后敲一下回車,我們就得到這樣的結(jié)果:
package main
import "fmt"
func main() {
x :=true
items :=[]string{"tv", "pc", "tablet"}
if x {
for _, i :=range items {
| (光標在這里了)
}
}
}
當然 Auto Pairs 還提供了很多選項,我們可以在它的 Github 倉庫查看更多用法。但是,以上的這些基本用法就已經(jīng)可以節(jié)約我們很多時間了。
作為一個合格的上古神器,Vim 沒辦法像那些 IDE 一樣去注釋代碼塊。但是有了 NERD Commenter 這個插件,我們就可以實現(xiàn)這樣的目標。
NERD Commenter 很智能,它可以自動識別代碼,并給出對應語言的注釋風格。最簡單的方法,我們可以在命令模式下通過敲 <Leader> +空格 來快速注釋代碼塊。在這里, 鍵默認是反斜杠 \ 鍵,我們也可以進行自定義。
我們怎么選中多行呢?那就是要在 visual mode (可視化模式)下進行了,這是 Vim 的基本操作了。
還有一個很有用的特性是 Sexy Comment (性感模式),我們可以使用 <Leader>+cs 來觸發(fā)。性感模式可以將代碼塊用很優(yōu)雅的方式來注釋,比如下面這種風格的注釋就是性感模式:
package main
import "fmt"
func main() {
/*
* x :=true
* items :=[]string{"tv", "pc", "tablet"}
*
* if x {
* for _, i :=range items {
* fmt.Println(i)
* }
* }
*/
}
Vim Surround 插件堪稱是一個大殺器,因為它可以將現(xiàn)有的代碼添加成對包圍符號。比如我們現(xiàn)在有這么一句代碼:
"Vim plugins are awesome !"
如果我們想把引號去掉,只需敲 ds" 即可:
Vim plugins are awesome !
如果我們想將雙引號改成單引號,我們可以敲 cs"':
'Vim plugins are awesome !'
想要換成其它符號也是一樣的道理。不僅如此,它還對 HTML 或 XML 標記語言支持非常好。比如有這么一句 HTML 語句:
<p>Vim plugins are awesome !</p>
現(xiàn)在我們想要加粗 awesome 這個詞,我們可以將光標放在這個單詞上,然后敲 ysiw<em> ,它就會自動添加標記:
<p>Vim plugins are <em>awesome</em> !</p>
Vim Surround 還可以以鋸齒的方式,在語句的上下方添加包圍符號,并將當前語句自動縮進。比如我們想在上面那條代碼添加標簽,我們可以敲 ySS<div class="normal"> :
<div class="normal">
<p>Vim plugins are <em>awesome</em> !</p>
</div>
同樣地,它的功能不僅于此,我們可以進它的 Github 倉庫查看更多強大的功能。
最后,最近很多小伙伴找我要Linux學習路線圖,于是我根據(jù)自己的經(jīng)驗,利用業(yè)余時間熬夜肝了一個月,整理了一份電子書。無論你是面試還是自我提升,相信都會對你有幫助!目錄如下:
免費送給大家,只求大家金指給我點個贊!
鏈接:https://pan.baidu.com/s/1_6uniaFV0rdMWIdMwgZjbg 提取碼:9pbc
也希望有小伙伴能加入我,把這份電子書做得更完美!
推薦閱讀:
用這 10 個 Vim 插件,可以讓你在寫代碼或運維時,感覺更棒。-- Maxim Burgerhout(作者)
我使用 Vim 文本編輯器大約 20 年了。有一段時間,我一直在定制我的 Vim 配置,但在只有在最近兩年我才會使用插件。
最近,當我重新安裝系統(tǒng)時(就像我經(jīng)常做的那樣),我覺得這是一次好的機會,我想找出多種編程語言環(huán)境下的最佳 Vim 插件,以及如何將這些插件和每種語言結(jié)合起來。
有時,我會為特定的語言和配置使用特定的插件(例如,我只在 Ansible 配置中安裝 Rocannon),在此不細講了。不過下面介紹的 10 個 Vim 插件都是我的最愛,無論使用哪種編程語言,我?guī)缀醵紩褂盟鼈儭?/p>
我的首選并不是一個插件,但是它可以替換類似于 Vundle 的插件,所以在此介紹。
Volt 是一個不依存于 Vim 的 Vim 插件管理器。你可以用它安裝插件,并創(chuàng)建名為“profile”的插件組合。你可以使用一個簡單的命令 volt profile set myprofile 啟用新的配置。這樣我可以做到這樣的事情,如為 Python 配置單獨啟用 indentpython 插件。Volt 還提供了一種針對每個插件配置的簡單方法,這些配置會在“profile”之間共享,因此只需要安裝一次插件,就可以在多個“profile”之間使用。
Volt 還是相對較新且不夠完美(比如,不管你想要使用多少個“profile”,每個插件只能有一個配置文件),但除此之外,我發(fā)現(xiàn)它非常方便、快速和簡單。
Volt plugin
除了 Python,幾乎所有的主流編程語言都使用括號(小括號、方括號和大括號)。通常,它們會嵌套使用多對括號,因此很難搞清楚某個括號的開閉區(qū)間。我發(fā)現(xiàn)自己經(jīng)常要數(shù)小括號,尤其是在復雜的 Bash 腳本中,以確保無誤。
這時候就需要 vim-rainbow 插件!它為每對括號設置不同的顏色,因此很容易識別出哪些括號是一對括號。它非常有用而且五彩斑斕。
vim-rainbow plugin
Vim 有很多這種插件,例如 Powerline ,它會在底部欄顯示你正在處理的文件、光標所在的文件位置以及文件類型等信息。這些插件各有利弊,在簡單比較后,我選擇了 lightline 。它相對較小,便于安裝和擴展,并且不依賴于其他工具或插件。
Lightline plugin
NERDTree 是一個很經(jīng)典的插件。在大型項目中,你可能很難找到想要編輯的內(nèi)容所在文件的確切名稱和路徑。使用快捷鍵(我使用的是 F7,因為我在 .vimrc 中配置了這個快捷鍵),搜索窗會以垂直分屏的方式打開,就可以輕松找到所需文件并打開它。對于大型項目,這是必備插件。對于那些經(jīng)常忘記文件名的人也很有用,比如我。
NERDTree vim plugin
程序員們在寫代碼時,有時會遇到一些難以調(diào)試的問題,導致他們想要注釋或不執(zhí)行某段代碼。這時候就需要 NERD Commenter 出場了。選擇代碼段,按 Leader 鍵 + cc,代碼就會被注釋掉。(標準的 Vim Leader 鍵 是 / 字符。)按 Leader 鍵 + cn,取消注釋。對于大多數(shù)文件類型,NERD Commenter 會自動使用正確的注釋符。例如,如果你正在編輯 BIND 區(qū)域文件 ,并將文件類型設置為 BIND 區(qū)域文件,Vim 會正確地使用 ;(分號)字符進行注釋。
NERD Commenter
我喜歡我的 Vim 主題配色。我也喜歡終端的主題色。我一直在 Vim 上使用 Solarized 配色,并且將我的終端、文件夾配色和 Vim 設為一致。
但是,有時我會根據(jù)周邊環(huán)境、屏幕亮度以及是否需要分享投屏,來切換明暗模式。
顯然,你可以選擇自己喜歡的任何配色方案,但我喜歡 Solarized,因為它有明暗模式功能,它可以簡單快捷地切換兩種模式。我的第二個選擇是 Monokai 。Volt 插件管理器讓我可以輕松地在兩者之間切換,因此我在 Python 編程時,使用 Monokai;Bash 編程時,使用 Solarized。
我沒有給 Solarized 找相應的圖片,因為本文中的所有其他圖片都使用了 Solarized 中的淺色或深色效果,可以確認一下這些圖片。
當尋找一個文件時,有時你想要一個文件瀏覽器,有時你只想在鍵盤上敲打出與文件名模糊匹配的內(nèi)容,對嗎?
fzf (全稱 “模糊查找器”)插件提供了這一功能。打出 :FZF 并輸入文件名內(nèi)容。不斷縮短的列表將顯示出與你輸入的文件名內(nèi)容相匹配的一些文件。我經(jīng)常使用它,最近使用它的頻率估計比使用 NERDTree 還多。缺點是這個插件依賴于 fzf binary,因此也必須安裝這個依賴包。它適用于 Fedora、Debian 和 Arch,據(jù)我所知并不在 EPEL 中。
fzf Vim plugin
有時,你需要搜索包含特定行或特定單詞的文件。我真的很喜歡使用 ack 插件,最好與 ag 結(jié)合使用,它倆的組合又被稱為 “ silver searcher ”。這一組合的速度非常快,覆蓋了 grep 或 vimgrep 的絕大多數(shù)使用場景。缺點是你需要安裝 ack 或 ag 才能正常運行。好消息是 Fedora 和 EPEL7 都可以使用 ag 和 ack。
ack vim plugin
大多數(shù) IT 人員都使用 Git 和 Git 倉庫中的文件進行工作。 gitgutter 插件在行號附近添加了一列,通過符號顯示該行的狀態(tài)為:已更改(~)、已添加(+)或者已刪除(-)。這有利于跟蹤你所做的更改,并且可以使你專注于手頭的任務,例如編寫補丁來修復一個關鍵錯誤。
gitgutter vim plugin
如果你在一個很大的文件中編寫代碼,會很容易忘記當前所在的位置,你可能需要上下滾動來查找某個功能。使用 Tag List 插件,只需要輸入 :Tlist,就能垂直分屏顯示出包含變量、類型、類和函數(shù)的代碼,你可以輕松跳轉(zhuǎn)到這些變量、類型、類和函數(shù)。這個功能對于多語言同樣適用,例如 Java、Python 以及任何能夠使用 ctags 功能的文件類型。
Tag List vim plugin
以上介紹的 10 個 Vim 插件使我作為系統(tǒng)管理員和兼職程序員的生活變得更輕松。你正在使用哪些 Vim 插件?請在評論中分享你最愛的插件。
via: https://opensource.com/article/19/11/vim-plugins
作者: Maxim Burgerhout 選題: lujun9972 譯者: hello-wn 校對: wxy
本文由 LCTT 原創(chuàng)編譯, Linux中國 榮譽推出
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。