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

讓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)

分享創造快樂