歡迎光臨
每天分享高質量文章

讓Vim變成你的神器,你還缺這幾大插件

 

我用Vim作為文本編輯器已有20多年了,但大約兩年前我決定將它作為我的主要文本編輯器。我使用Vim編寫代碼,配置檔案,博客文章等。Vim有很多很棒的功能,一旦你習慣了它,你就會變得非常高效。

 

一直以來,我都更傾向於使用Vim強大的原生功能,但是有許多開源的Vim插件,可以改善你的工作流程,大大提高你的工作效率,以下是我個人認為最好用的5個Vim插件

 

1. Auto Pairs

 

Auto pair插件可以幫助插入和刪除對字符,如方括號,圓括號或引號。這對於編寫代碼幫助很大,因為大多數編程語言在其語法中都要用到字符對 – 例如函式呼叫的括號或字串定義的引號。

 

在其最基本的功能中,會自動對輸入的起始字符插入相應的結束字符。例如,如果輸入左括號[,Auto-Pairs會自動插入右括號]。相反,如果使用Backspace鍵刪除左括號,Auto Pairs將刪除相應的右括號。

 

如果您啟用了自動縮進,則當你按Return / Enter鍵時,自動對將成對的字符插入正確的縮進位置,從而大大節省你的時間。

 

以如下這個Go代碼塊為例:

 

package main

import "fmt"

func main() {
    x := true
    items := []string{"tv""pc""tablet"}

    if x { 
        for _, i := range items
    } 
}

 

在專案後插入左大括號{,並按回車/回車會產生如下結果:

 

package main

import "fmt"

func main() {
    x := true
    items := []string{"tv""pc""tablet"}

    if x {
        for _, i := range items  {
            | (cursor here)
        }
    }
}

 

更多幫助你節約時間的功能,你可以通過查看GitHub專案頁(GitHub地址:https://github.com/jiangmiao/auto-pairs

 

2. NERD Commenter

 

NERD Commenter插件向Vim添加了代碼註釋功能,類似於集成開發環境(IDE)中的代碼註釋功能。安裝此插件後,你可以選擇一行或幾行代碼,並快速將其更改為註釋。

 

NERD Commenter集成了標準的Vim filetype插件,因此它可以理解多種編程語言,最簡單的入門方法是按Leader + Space切換當前已註釋和未註釋的行。標準的Vim Leader鍵是字符。

 

在視圖樣式下,可以選擇多行同時切換它們的狀態,其他一些有用的功能就是由Leader + cs觸發的以”性感”的方式註釋,這是一個用多行字符創建的一個漂亮的高級註釋區,例如:

 

package main

import "fmt"

func main() {
    x := true
    items := []string{"tv""pc""tablet"}

    if x {
        for _, i := range items {
            fmt.Println(i)
        }
    }
}

 

選擇函式main中的所有行並按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編寫代碼的開發人員必備的。(GitHub地址:https://github.com/scrooloose/nerdcommenter

 

3. VIM Surround

 

vim-surround一款強大的更改成對符號的Vim插件,它類似於Auto pair,只不過它在插入文本時不工作,在編輯文本時更有用。例如:

 

"Vim plugins are awesome !"

 

當你的光標在句子的引號之間時,你可以按下組合“ds”來移除句子周圍的引號:

 

Vim plugins are awesome !

 

你亦可使用命令cs ‘ ‘將雙引號改為單引號:

 

'Vim plugins are awesome !'

 

或者使用命令cs'[改為方括號

 

[ Vim plugins are awesome ! ]

 

此外,這個插件在處理HTML或XML標記時也很出色。如下HTML行:

 

<p>Vim plugins are awesome !p>

 

 

當光標位於該單詞的任何位置時,您可以通過按ysiw 組合來強調“awesome”這個單詞 :

 

<p>Vim plugins are <em>awesomeem>

!p>

 

Vim Surround還有許多強大的功能,你依然可以從GitHub獲得。(GitHub地址:https://github.com/tpope/vim-surround

 

4. Vim Gitgutter

 

如果你使用Git版本控制,那麼Vim Gitgutter對你的幫助一定很大,它可以顯示git diff狀態,例如,將下麵的代碼作為Git中提交的版本:

 

 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在做了一些修改後,在gutter中顯示如下符號:

 

  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行。

 

5. VIM Fugitive

 

對於將Git納入Vim工作流程的任何人來說,Vim Fugitive是另一個很棒的插件。它是一個Git包裝器,允許你直接在Vim執行Git命令並與Vim的界面集成。

 

下麵是一個使用Vim Fugitive的基本Git工作流示例。考慮到我們對第4部分Go代碼塊所做的更改,您可以通過輸入命令:Gblame來使用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:

 

# On branch master
  2 # Your branch is up to date with 'origin/master'.
  3 #
  4 # Changes not staged for commit:
  5 #   (use "git add ..." to update what will be committed)
  6 #   (use "git checkout -- ..." 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的結果。您可以通過在帶有檔案名的行上按下- 將檔案進行提交。您可以再次按-重置,更新最新狀態:

 

  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 ..." 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 }

 

現在可以使用命令:Gcommit提交更改。

 

  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查看結果,並通過: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

 

如果你想瞭解更多,可查看GitHub詳情頁(GitHub地址:https://github.com/tpope/vim-fugitive

赞(0)

分享創造快樂