vim插件开发_5个对开发人员有用的Vim插件

vim插件开发

我使用Vim作为文本编辑器已有20多年了,但是大约两年前,我决定将其作为我的主要文本编辑器。 我使用Vim编写代码,配置文件,博客文章,以及几乎所有我能以纯文本格式完成的事情。 Vim具有许多强大的功能,一旦习惯了它,您将变得非常有生产力。

我通常会在大多数工作中使用Vim强大的本机功能,但是开源社区开发了许多插件,这些插件可以扩展Vim的功能,改善您的工作流程并提高工作效率。

以下是五个使用Vim以任何编程语言编写代码时有用的插件。

1.自动配对

自动配对插件可帮助插入和删除成对的字符,例如方括号,括号或引号。 这对于编写代码非常有用,因为大多数编程语言在其语法中都使用成对的字符,例如函数调用的括号或字符串定义的引号。

自动配对功能具有最基本的功能,当您键入开始字符时,它会插入相应的结束字符。 例如,如果输入括号[ ,自动对将自动插入右括号] 。 相反,如果使用Backspace键删除左括号,则自动配对会删除相应的右括号。

如果启用了自动缩进功能,则在按Return / Enter键时,“自动配对”会在正确的缩进位置插入配对的字符,从而使您免于查找正确的位置并键入所需的空格或制表符。

例如,考虑以下Go代码块:


   
   
package main

import "fmt"

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

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

项目后插入左花括号{ ,然后按Return / Enter会产生以下结果:


   
   
package main

import "fmt"

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

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

自动配对提供了许多其他选项(您可以在GitHub上阅读这些选项),但是即使是这些基本功能也可以节省时间。

2.书呆子评论者

NERD Commenter插件向Vim添加了代码注释功能,类似于在集成开发环境(IDE)中发现的功能。 安装此插件后,您可以选择一行或几行代码,然后按一下按钮即可将其更改为注释。

NERD Commenter与标准的Vim 文件类型插件集成在一起,因此它可以理解几种编程语言,并为单行或多行注释使用适当的注释字符。

最简单的入门方法是按Leader + Space键在注释和未注释之间切换当前行。 Vim Leader的标准键是\字符。

在可视模式下,您可以选择多行并同时切换它们的状态。 NERD Commenter也了解计数,因此您可以提供n个计数,然后提供命令以一起更改n行。

其他有用的功能是由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编写代码的开发人员的必备工具。

3. VIM环绕声

Vim Surround插件可帮助您用字符对(例如括号或引号)或标记(例如HTML或XML标记)“包围”现有文本。 它与自动配对相似,但是,在插入文本时,它比在插入文本时更有效,而在编辑文本时,它更有用。

例如,如果您有以下句子:

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

当光标位于单词“ awesome”上的任意位置时,可以通过按组合键ysiw <em>来强调该单词:

 <p>Vim plugins are <em>awesome</em> !</p> 

请注意,该插件足够聪明,可以使用适当的结束标记</ em>

Vim Surround也可以使用ySS缩进文本并在自己的行中添加标签。 例如,如果您有:

 <p>Vim plugins are <em>awesome</em> !</p> 

添加具有以下组合的div标签: ySS <div class =“ normal”> ,并注意段落行会自动缩进。


   
   
<div class="normal">
        <p>Vim plugins are <em>awesome</em> !</p>
</div>

Vim Surround还有许多其他选项。 试试看-并咨询GitHub以获取更多信息。

4. Vim Gitgutter

Vim Gitgutter插件对于使用Git进行版本控制的任何人都非常有用。 它在“装订线”(符号列)中以符号形式显示Git diff的输出,其中Vim提供了附加信息,例如行号。 例如,将以下内容视为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在装订线中显示以下符号:


   
   
    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在“大块”(在文件中进行的单个更改)之间导航,甚至可以通过按Leader + hs来暂存单个大块以进行提交。

该插件为您提供了更改的即时视觉反馈,如果您使用Git,它是对工具箱的重要补充。

5. VIM逃犯

Vim Fugitive是将Git集成到Vim工作流程中的任何人的另一个出色插件。 这是一个Git包装器,可让您直接从Vim执行Git命令并与Vim的界面集成。 该插件具有许多功能-请查看其GitHub页面以获取更多信息。

这是一个使用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检查存储库状态:


   
   
 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结果的拆分窗口。 您可以通过按文件名所在行上的-键来暂挂提交文件。 您可以再次按-重新设置状态。 该消息将更新以反映新状态:


   
   
  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提交更改。 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查看结果,并使用: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插件可帮助开发人员以任何编程语言编写代码。 还有另外两类可帮助开发人员的插件:代码完成插件和语法检查器插件。 它们通常与特定的编程语言有关,因此我将在后续文章中介绍它们。

编写代码时,您还使用另一个Vim插件吗? 请在下面的评论中分享。

翻译自: https://opensource.com/article/19/1/vim-plugins-developers

vim插件开发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值