让Vim变成你的神器,你还缺这几大插件

开源最前线(ID:OpenSourceTop) 

链接:https://opensource.com/article/19/1/vim-plugins-developers

我用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 <em>组合来强调“awesome”这个单词 :


<p>Vim plugins are <em>awesome</em> !</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 <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的结果。您可以通过在带有文件名的行上按下- 将文件进行提交。您可以再次按-重置,更新最新状态:


  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 }


现在可以使用命令: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

推荐↓↓↓
Linux学习
上一篇:Linux 搜索文件和文件夹的 4 种简单方法 下一篇:Systemd 曝 3 漏洞,绝大部分 Linux 易受攻击