好用的 82 款 Vim 插件

1.Alternate

在 C 或 C++ 项目中,源文件和头文件常常成对出现。例如, utils.cutils.h ,你经常需要同时编辑这两个文件。使用 Alternate,你可以输入 :A 命令,在.c 和.h 文件之间快速切换。如果你在.c 文件中,就会切换到.h 文件,如果你在.h 文件中,就会切换到.c 文件。

2.Bufexplorer

要高效地处理多个文件,你需要使用几个不同的命令,如 :ls (列出缓冲区)、 :b (编辑缓冲区)、 :bn (下一个缓冲区)和 :bp (前一个缓冲区)。然而,通常情况下,在找到正确的文件之前,你的大部分时间都在键入 :bn:bn:bn

Bufexplorer 使得在 vim 中处理多个文件变得轻而易举。它添加了 \be 键绑定( \ 是前导键),它会打开一个所有缓冲区的列表,移动到显示文件名的行并按回车键,你就可以快速切换到另一个缓冲区。

3.Bufferize

许多 vim 命令继承自 vi,它们的输出非常简陋。它们把输出打印到屏幕上,不能搜索或复制。如果你按空格太多次,内容就消失了。几乎不可能搜索这个文本,有时你甚至不知道如何让 vim 再次显示它。

Bufferize 解决了这个问题。它接受一个 vim 命令并从其输出创建一个临时缓冲区,然后在一个分屏窗口中打开它。例如 :Bufferize map 将在一个新窗口中显示所有键盘映射,你可以搜索它们。要退出新窗口,只需使用常规的 :q 命令。

4.Bufferline

Bufferline 补充了 Bufexplorer(见上文),使它更容易处理多个文件 / 缓冲区。它在状态行中打印所有打开的文件及其缓冲区编号的列表。你只需要浏览一下这个列表,输入 :b 5 就可以切换到第 5 个文件 / 缓冲区,或者使用 Bufexporer,点击 \be 后面跟 /5 ,然后回车。

5.Bufkill

如果你在一个分割中打开了两个缓冲区,并且你想要关闭一个缓冲区,那么你可以使用 :bd 命令。不幸的是,这个命令也关闭了分割。通常,你不想关闭分割,而只想关闭缓冲区。在这种情况下,使用 Buffkill 的 :BD 命令,该命令将关闭缓冲区,但保留分割。

6.Characterize

Characterize 添加了 ga 快捷方式,显示光标下 Unicode 字符的名称、代码点值和十六进制值。

7.Clever-f

此扩展改进了用于查找下一个 / 前一个字符的 fF 快捷键。按下 fa 会转到下一个 a 。按下 Fa 会转到前一个 a 。没有这个扩展,你必须再次输入 fa 来找到下一个 a 或者按下分号 ; 。类似地,你必须输入 Fa 才能再次找到前面的 a 。如果你是一个 vim 老手,你已经在用 ;, ,你最终会 fafafafaFaFaFaFa

有了这个扩展,你可以再按一次 f ,它会搜索下一个字符,你可以再按一次 F ,它会搜索前一个 a ,所以,不用 fafafafa ,你现在可以用 fafaff 代替 FaFaFaFa ,你可以 FaFFF 。此外,当你按下 fF 时,它将显示下一个 / 前一个匹配项,你立即就知道光标将跳转到哪。

8.Colorscheme-gruvbox

深色系主题。灰色背景,浅绿色文字和功能。

9.Colorscheme-jellybeans

深色系主题。黑色背景,浅绿色文字,浅黄色功能。

10.Colorscheme-seoul256

深色系主题。灰色背景,淡蓝色文字,淡黄色功能。

11.Commentary

最简单、最快捷的注释插件之一。按 gcc 将整个行注释掉。按 gc 注释掉一个可视化选中部分。再次按下相同的快捷键取消注释。

12.Conflicted

这个插件有助于解决 git 合并冲突。假设你刚从 github 上的项目主分支中取出代码,遇到了一个合并冲突错误。要解决这个问题,可以运行这个插件提供的 :Conflicted 命令。该命令创建一个三向 diff,并将结果放在三个垂直分割的窗口中。左边的分割是上游更改,中间的分割是工作更改,右边的分割是本地更改。你可以接受上游 diff 或本地 diff 来解决冲突。为快速接受正确的 diff, Conflicted 提供了两个键映射。 dgu 命令将使用上游 diff, dgl 将使用本地 diff。要解决下一个冲突,使用 :GitNextConflict 命令。如果没有更多的冲突,vim 将退出,你可以 git commit 已解决冲突的文件。

13.Ctrlp

这个插件添加了 ctrl+p 绑定来打开一个模糊文件打开对话框。例如,如果你需要编辑 math-config.json 文件,你可以键入文件名的一些字母,如 mat.jsmjson ,甚至 thfig (“th”是“math”的最后两个字母,“fig”是“config”的最后三个字母)。Ctrlp 将立即缩小搜索范围,并提供最佳匹配。它还可以用来打开 mru 文件(最近使用的文件)和缓冲区,你可以使用 ctrl+rctrl+f 快捷键在文件 /mru/ 缓冲区模式之间切换。

14.Ctrlp-funky

Ctrlp-funky 通过添加函数查找模式扩展了上面的 Ctrlp 插件。你可以运行 :CtrlPFunky 命令,立即在函数搜索模式下打开 Ctrlp,或按下 ctrl+p 打开 Ctrlp,然后按 ctrl+r (或 ctrl+f )几次,进入函数搜索模式。例如,如果你有一个 void debug_print() 函数,你可以输入 vodepr (单词 void、debug、print 的前两个字母),然后回车,vim 将跳转到这个函数的定义。

15.Ctrlsf

有了这个插件,你可以快速搜索和替换大量的文本。当你运行 :CtrlSF 模式命令时,它将在左侧创建一个包含所有匹配项的结果窗口。“结果”窗口中还有一些围绕匹配项的上下文行,方便你知道你正在查看的是否是正确的匹配项。现在,你可以直接在结果窗口中进行编辑。当你保存结果窗口时,更改也将保存在文件中。你也可以按下回车键,在右边的窗口中打开每个结果并在那里编辑它。

16.Delimitmate

Delimitmate 会自动关闭引号和括号。例如,你输入“会自动得到“”,而且光标位于两个引号之间。

17.Diff-enhanced

这个插件为 vimdiff 添加了一个新的 diff 可视化方法,它试图最小化差异的数量。当你处于 diff 模式时,输入 :EnhancedDiff patience 命令,你就能够更好地查看 diff。

18.Dirvish

Dirvish 支持惯用的缓冲区驱动开发,它作为一个文件浏览器补充了 Nerdtree(见下文)。当你按下 - 键时,当前缓冲区将变成一个文件浏览器。你将看到当前工作目录或当前打开的文件目录中的所有文件。然后可以使用箭头键 hjkl 和搜索操作符 / 导航这个目录并查找文件。当你按下回车键时,Dirvish 将退出,光标下的文件将在当前窗口中打开,作为一个新的缓冲区。当你有多个分割打开时,这个插件特别强大,因为你可以指定下一个文件在哪个分割中打开。你只需导航到分割,点击 - ,找到文件,然后点击回车,就可以在希望的分割中打开它了。

19.Dsf

Dsf 是删除周围函数的缩写。通过在函数调用中按下 dsf ,它将删除周围的函数名。例如,如果你有像 print_r(get_post|s(true)) 这样的代码,并且你的光标位于|字符所在的位置,那么当你按下 dsf 时,你将获得输出 get_posts(true)

20.Easy-align

有了这个扩展,你就可以整齐地将文本对其到列中。它添加了 :EasyAlign 命令,你可以将其绑定到你想要绑定的任何键盘快捷键。当你执行它时,它会要求你输入列分隔符字符,然后对所选文本进行格式化。例如,要对齐代码使所有 = 符号都在同一列中,你可以使用 V 命令直观地选择行,然后运行 :EasyAlign ,接着 = ,然后回车。

21.Easymotion

Easymotion 让你可以更快地在文件中导航。它添加了 \\ w 快捷方式,允许你快速跳转到光标之后的任何单词。它为每个单词分配一个唯一的字母,当你下次按下它时,光标会立即跳转到该单词。它还添加了 \\b 快捷方式,让你可以快速地向后导航。类似地,如果你需要跳转到上面或下面的任何一行,你可以使用 \\k\\j 快捷键。

22.Exchange

使用 Exchange 插件,你可以非常快速地交换两个单词。转到第一个单词并按 cxw ,然后转到第二个单词并再次按 cxw 。你就完成了这两个词位置的交换!

实际上,你不仅可以交换两个词,还可以交换任何两个 motion。按下 cx 后,下一个快捷键是 motion(motion 是移动光标的键盘快捷键)。例如,要交换两个字符,可以执行 cxl ,然后再执行 cxl (l 是将光标向右移动一个位置的动作)。类似地,要交换两个句子,你可以执行 cxis ,然后对第二个句子也执行 cxis 操作。在这种情况下,motion 是选择整个句子。

同样,如果两个 motion 相同,只要按一下 . 重复第一个操作。

23.Expand-region

通常,你希望选择比刚刚选择的文本多一点的文本。例如,你使用 viw 选择了一个单词,但随后发现需要选择整个引用字符串。有了这个插件,你可以按 + ,它会把当前的选择扩展到下一个最大的文本对象。从字符到一个单词、一个带引号的字符串、一行、一段到整个文件。

24.Far

Far 使查找和替换多个文件中的文本变得很容易。它添加了 :Far pattern1 pattern2 命令。当你运行这个命令时,它将屏幕分成两半。在上半部分,它显示了 pattern1 匹配的所有文件和行。在下半部分,可以预览匹配的上下文。在上面的分割中,你可以使用 hjkl 键来导航匹配项。默认情况下,所有匹配项都将用 pattern2 替换,但你也可以使用 t 键取消匹配项的标记(并再次使用 t 标记它们)。选择要替换的所有匹配项之后,运行 :Fardo 命令。这个命令将执行实际的替换。

Far 也很适合于查找所有匹配项。你可以使用 :F pattern 命令,它将查找所有匹配的模式,并把它们显示在两个分割中,但是它不会执行替换。

25.Fugitive

使用 Fugitive,你可以直接从 vim 使用 git。它添加了 :Git 命令(或简写为 :G ),该命令运行 git status ,并在一个分割窗口中显示结果。然后,可以使用键盘快捷键 s 来暂存(git add)一个文件,使用 u 来恢复(git reset)一个文件。暂存文件之后,可以按 cc 创建提交。我还不知道如何进行 git 推送,所以这是我需要学习的内容。如果我能够在不离开 vim 的情况下进行代码推送和部署,那将非常方便。

26.Fzf

Fzf 是 Ctrlp(见上文)的一个替代方案。它为快速打开文件和切换缓冲区添加了几个命令。这些命令是 :Files:Buffers 。如果你以前是按多次 tab 键来补全文件名和缓冲区名,那么现在你只需要键入文件名或缓冲区名的几个字母。例如,如果你需要打开 options.c 文件,你可以直接输入 opt.c ,甚至是 oc ,Fzf 都会为你提供最佳匹配。

27.Fzf-mru

Fzf-mru 增加了一个可以通过 :FZFMru 命令访问的 mru 模式。此模式允许你快速访问最近编辑的文件。假设你昨天在从事 scraper 项目相关的工作。今天,当你进入 mru 模式时,只需要输入 scra ,它就会显示你昨天处理的 scraper 项目的所有文件。

28.Gitgutter

Gitgutter 增加了两个有用的东西。第一个列位于 vim 最左边,它快速显示当前文件的 git diff 信息。你可以快速查看添加和更改了哪些行。第二个是 ]c[c 映射,让你可以在更改的行之间跳转。

29.Goyo

我最近切换到 Goyo 模式编程。当你输入 :Goyo 命令时,这个插件会将内容居中,并删除行号和状态行,这样你就可以专注于无干扰的编码了。如果还让 vim 全屏,那就更好了。

30.Grepper

Grepper 改进了 vim 中的查找,并增加了对 ripgrep 的支持。你可以输入 :Grepper ,然后输入你的搜索查询,它将找到所有匹配项并在 quickfix 窗口中加载它们。然后你可以使用 vim 的 :cn:cp 命令来导航到下一个 / 前一个匹配项,或者使用 Unimpaired 插件(见下文)的快捷方式 ]q[q

这个插件的作者建议将它与 qfenter.vim 插件一起使用。这是我还要尝试的东西。

31.Gv

Gv 将 git 提交浏览器添加到 vim 中。你可以运行 :GV 命令,它将显示整个提交树。然后,你可以在提交窗口中按下回车或 o 来查看各个差异。要退出 diff 查看器,请按 q 。如果你只对当前文件的 git 日志感兴趣,那么可以使用 :GV! 命令。

32.Illuminate

Illuminate 高亮显示当前可见缓冲区中光标下这个单词的所有出现。例如,如果光标在单词 var 上,那么所有其他的 var 也将高亮显示。

33.Interestingwords

这个插件允许你同时高亮显示多个单词。它添加了快捷方式 \k ,可以更改光标下单词的背景颜色,以及文件中出现的所有相同单词。你还可以使用 nN 来跳转到下一个 / 上一个高亮显示的单词。当你处理复杂的代码并需要跟踪多个变量的使用情况时,它非常有用。

34.Linediff

Linediff 让你可以快速比较两个文本块。可视地选择第一个文本块并运行 :Linediff 命令。然后可视地选择第二个块并再次运行相同的命令。这个插件将创建一个新的标签页,将两个文本块的差异垂直分割。如果结果看起来太冗长,运行 :EnhancedDiff patience 命令(来自上面的 Diff-enhanced 插件)来改进差异。

你还可以使用这个插件快速解决 git 合并冲突。如果你打开的文件中存在合并冲突,将光标放在合并冲突标记 <<<<<<>>>>> 之间,并运行 :LinediffMerge 命令。接下来,插件会自动创建一个垂直分割,分割合并冲突差异,你可以在左边或右边的分割中进行编辑,并通过运行 :LinediffPick 命令来自动解决合并。

35.Listtoggle

一旦你对 vim 的熟练达到了一定的程度,你将开始一直使用 quickfix 窗口(以及位置列表窗口)。查找结果将在 quickfix 中,linting 错误将在 quickfix 中,编译错误将在 quickfix 中,待办事项列表将在 quickfix 中。一切都会很快解决。你会一直关闭和打开 quickfix。不幸的是,没有简单的方法来切换 quickfix 窗口和位置列表窗口。你必须使用 :copen:cclose 命令来打开 / 关闭 quickfix,以及 :lopen:lclose 来打开 / 关闭位置列表。这打字太多了。

Listtoggle 使它更加简单,并增加了两个快捷方式来快速切换它们。 \q 绑定将切换 quickfix 窗口,而 \l 绑定将切换位置列表窗口。

36.Locate

通常,你需要查找当前文件中的所有出现。你不想来一次全局搜索,你不想搜索和替换,你不想要任何分割,你只想要一个所有结果的总览。Locate 通过 :Locate 命令(或简写为 :L )提供完全相同的功能。只需键入 :L pattern ,这个插件就会打开一个快速位置列表,其中包含当前文件中所有出现该模式的地方。你可以使用快捷方式 \l 切换位置列表(由 Listtoggle 插件提供,见上文),你还可以通过快捷方式 ]l (下一个结果)和 [l (前一个结果)(由 Unimpaired 插件提供,见下文)来浏览结果。

37.Matchtagalways

这个插件突出显示了光标所在位置最内层的 HTML 打开和关闭标记。例如,如果光标在

cursor here

,那么这个插件将突出显示

标签。

38.Matchup

Matchup 添加了快捷方式 % ,允许你在匹配的括号对之间快速跳转。如果你的光标在{字符上,那么按 % 后它将跳到}。如果你再次按 %,它将跳回 { 。它还添加了快捷方式 z% ,使你可以向前跳转到下一对圆括号内。假设你有一个函数 pri|nt_data("hi", 7) 和你的光标在|。然后,在按下 z% 之后,光标将出现在函数参数中。

39.Nerdcommenter

Nerdcommenter 是另一个代码注释插件。借助 Commentary (见上文),你可以使用 gc 快捷方式快速切换注释,但是 Nerdcommenter 提供了对注释的更多控制。例如,你可以使用 \cm 快捷方式执行多行注释,并使用 \cA 快捷方式在行尾添加注释。

40.Nerdtree

Nerdtree 是一个文件管理器。它在 vim 的左侧显示当前项目的完整目录和文件树结构。要打开和关闭 Nerdtree,请运行 :NERDTreeToggle 命令。方便起见,你可以将它绑定到快捷方式 \t 。当它打开时,你可以使用常规的 hjkl 键进行导航。使用键 O 打开项目中的所有目录,然后使用常规的 / search 操作符搜索文件。要在右侧打开光标下的文件,请按下 ok 键。要查看隐藏的文件,请使用 I 键。与 Dirvish(见上文)相比,它支持文件管理器驱动的开发。Nerdtree 总是在右侧打开文件,而不是指定在哪里打开文件。

41.Nerdtree-syntax-highlight

这个插件将语法高亮显示添加到 Nerdtree 中。现在,文件和目录有了不同的颜色。

42.Peekaboo

Vim 有许多不同的寄存器。当你复制文本时,它会进入 " 寄存器。当你删除文本时,它会进入数字寄存器。然后还有小写和大写等寄存器供你个人使用。

当你要使用寄存器时,这个插件会预览它们。当你按下 ” 键时,它会在右侧打开一个寄存器备忘单,你可以看到每个寄存器的内容并选择正确的寄存器。你还可以按空格键加大寄存器备忘单。

43.Qfgrep

Quickfix 是 vim 最大的特性之一。不幸的是,一旦用结果填充了 quickfix 列表,它就会被冻结。你无法进一步过滤 quickfix 列表。这种行为不太合理,因为你总是希望细化结果。

Qfgrep 允许你这样做。现在,你可以在 quickfix 窗口中过滤结果。使用 \g 快捷方式过滤结果, \v 转换过滤结果,\r 还原原始条目。它还添加了 :QFGrepPat 命令,该命令执行与\g 相同的操作, :QFGrepPatV 则执行与 \v 相同的操作。

44.Qlist

Qlist 添加了 :Ilist 函数,它是 vim 内置的 :Ilist 函数的改进版本。内置的 :ilis t 函数来自一个计算机没有多少内存的时代,所以它当时不是很有用,因为它会一股脑把所有东西都打印到屏幕上,你无法使用这样的结果(见上文的 Bufferize 插件)。改进后的 :Ilist 函数从结果中创建一个 quickfix 列表。你现在可以运行 :Ilist pattern ,这个插件将在当前以及包括的项目文件中找出所有用到的单词模式,并把它们放在 quickfix 窗口中,正是你想要显示所有结果的地方。

45.Quickfix-reflector

你不仅希望筛选 quickfix 结果(上面的 Qfgrep),还希望编辑 quickfix 窗口,就好像它只是另一个缓冲区一样。这个插件使得 quickfix 窗口可以修改。现在可以使用 dd 删除 quickfix 条目,使用 i 添加新条目。你还可以直接编辑 quickfix 结果,当你通过:w 保存 quickfix 窗口时,文件也会得到更新。

46.Ragtag

Ragtag 为处理 HTML 标签添加了三个有用的键盘快捷键。第一个是 ctrl+x/ 关闭任何打开的标签。例如,如果光标在

标签中,那么你可以立即闭合它并得到

。第二个是
ctrl+ xSPACE ,它根据刚刚输入的单词创建一个开始和结束标签。例如,如果你输入 tag,然后立即按下这个快捷键,那么你将得到

|
,其中|是光标。第三种是
ctrl+xENTER

,它的工作方式与前一种快捷方式相同,但在两个标签之间放了一个空行。

47.Ranger

这个插件让你可以跳转到外部 Ranger 文件管理器,在 vim 中打开一个文件。它类似于 Dirvish(见上文),让你可以轻松地进行缓冲区驱动的开发。当你在任何窗口中运行 :Ranger 命令时,它将启动 ranger 进程。然后,当你选择一个文件时,它将在选择的文件中作为一个新的缓冲区打开。

48.Repeat

Repeat 改进了 . 命令。它让你可以重复其他插件的命令和动作。例如,如果你使用 Surround 插件(见下文)将文本括在引号中,那么按下 . 会重复这个动作。

49.Rooter

由于 vim 不是 IDE,所以它几乎没有项目的概念,也不知道项目的根目录是什么。当你尝试打开一个文件时,vim 会搜索主目录或其他目录,而不是项目目录。

这个插件会自动将 vim 的当前工作目录设置为项目目录,使得处理项目变得更加简单。它通过查找最根部的 .git 目录来实现。通常,此类目录表明了项目的起点。

50.Scratch

Vim 的文档提到了一种称为 scratch 缓冲区的特殊缓冲区类型。这个插件实现了它。Scratch 缓冲区是临时丢弃缓冲区。当你在做一个项目的时候,快速笔记是很有用的。使用 :Scratch 命令打开它。光标将跳转到顶部的 scratch 窗口。当你将光标移动到另一个窗口时,scratch 窗口将自动关闭。

51.Signature

当使用标记时,没有一种可视化的方式来告诉你在哪里添加了它们。你可能记得一两个标记,但当你再加的时候,你就迷失了。这个插件解决了这个问题,它会在最左边的列中显示标记。你可以用默认快捷方式 mamb 、…添加和切换标记,用 dmadmb 、…删除单个标记,用 m- 删除所有标记,用 ]'[' 跳到下一个和前一个标记,用 m/ 将所有标记放到位置列表窗口中。

52.Speeddating

在正常模式下, ctrl+actrl+x 可以实现数值递增和递减。这个插件使这些键盘快捷键也可以实现日期和时钟时间的增加。例如,如果光标位于字符串 2000-01-31 上时,按 ctrl+a 将使其变为 2000-02-01 ,按 ctrl+z 将使其变为 2000-01-30

53.Splitjoin

Splitjoin 让你可以将代码片段从单行语句切换到多行语句,反之亦然。假设你有一个单行 HTML 代码片段

hi

,然后按
gS

(分割),它将转换成一个多行 HTML 代码片段

\n hi \n

。如果你在这个多行代码段上按下
gJ

(合并),它将再次变为一个单行代码段。

54.Surround

借助 Surround,你可以快速删除、更改和添加文本周围的匹配符号对。假设你有一个字符串 "hello world" 。按下 ds" ,引号将被删除,字符串将变成 hello world 。按下 c”‘键,双引号会变成单引号,字符串会变成’hello world’。你还可以按下 cs”

,这将把引号改为

HTML 标签

,字符串将变成

hello world

。如果你有一个普通的字符串 hello world,那么要将它括在引号中,请使用 v 选择它,然后按 S 并输入包围符号。如果你有一个单词
hello ,你想把它用单引号括起来,按
ysiw'

55.Swap

Swap 让你可以快速地交换单词或逗号分隔的函数参数。例如,如果你有一个函数 print(a, b, c),那么你可以按 g>,它会变成 print(b, a, c) 。按 g< ,它会再次变成 print(a, b, c) 。你还可以通过按 gs 进入可视化交换模式。然后使用 hjkl 键来交换参数。

56.Syntax-css3

CSS3 语法高亮插件。

57.Syntax-dockerfile

Dockerfile 语法高亮插件。

58.Syntax-html5

HTML5 语法高亮插件。

59.Syntax-i3config

i3 窗口管理器配置文件语法高亮插件。

60.Syntax-javascript

JavaScript 语法高亮插件。

61.Syntax-json

JSON 语法高亮插件。

62.Syntax-nginx

Nginx 配置文件语法高亮插件。

63.Syntax-php

PHP 语法高亮插件。

64.Syntax-tmux

tmux 配置文件语法高亮插件。

65.System-copy

Vim 终端没有用于从系统剪贴板复制和粘贴的寄存器 *+ 。这个插件添加了 cp 快捷方式,通过调用外部实用程序 xsel 将所选文本或 motion 复制到系统剪贴板。它还具有从系统剪贴板粘贴的快捷方式 cv

66.Tabular

Tabular 的功能与 EasyAlign(见上文)相同。它对文本进行列对齐。与 EasyAlign 相比,它的一个优点是,你可以直接将用于对齐的正则表达式传给它。与正则表达式相匹配的位置将会对齐。例如 :Tabular /regex 将创建整齐的 regex 列。

67.Tagalong

这个插件可以很容易地重命名 HTML 的开闭标签对。你只需要重命名其中一个,这个插件会自动重命名另一个。例如,如果你有

,你把开标签

重命名为

,那么闭标签会自动重命名为

,你将得到输出

68.Targets

掌握 vim 的一个步骤是学习使用文本对象。文本对象允许你操作整个文本结构,而不是单个字符。Vim 已经附带了许多文本对象——你可以访问单词、句子、段落和代码块。这个插件增加了十几个文本对象。例如,你可以使用 di 删除逗号分隔的项,或者你可以使用 cincil 来更改前一个和后一个逗号分隔的项,你可以使用 ci+ 来更改 sum 元素,等等。

69.Textobj-user

从头编写自己的文本对象非常困难,因为在调用文本对象时必须精确复制 vim 的行为,并了解所有的陷阱和缺陷。这个插件提供了一个快速简单的接口,让你可以实现自己的文本对象。“textobj”插件有一个完整的生态系统,使用这个插件可以添加各种有用的文本对象。

70.Textobj-entire

这个插件使用 Textobj-user(见上文)创建一个文本对象 ie 和 ae 来操作整个文件。例如,要选择整个文件,你可以执行 vae,要删除整个文件,你可以执行 vaed 或 dae。

71.Textmanip

这个插件让你可以直观地移动选中的文本。例如,你能可视化地选择一个单词,然后使用快捷键 ctrl+h 和 ctrl+l 将其向左或向右移动。类似地,你可以使用快捷键 ctrl+j 和 ctrl+k 向下移动整个行。

72.Thesaurus-query

有了这个插件,你可以访问 Libreoffice 同义词典。一旦配置了它,你可以使用 :Thesaurus word 命令来查找与 word 相关的所有单词,你还可以使用 :ThesaurusW 来查找与光标下的单词相关的所有单词。

73.Tmux-complete

当你处于流程中时,会同时发生许多事情,并且会打开许多 tmux 窗口和窗格。一个显示 git 日志,另一个用于测试,还有一个显示帮助手册,等等。通常,你需要从 tmux 窗格获取信息到 vim。通常,你必须用鼠标来复制它,但这非常低效。有了这个插件,你可以在插入模式下按下 ctrl+x ctrl+u,从任何 tmux 窗口 / 窗格补全单词。它将提供来自所有 tmux 窗口 / 窗格的所有单词的列表。

74.Traces

当用 :s/old/new 命令替换文本时,执行这个命令后才能看到更改。这个插件让你可以在输入时预览 old 匹配和用于替换的部分 new,你可以直接看到你是否做对了。

75.Ultisnips

Ultisnips 是一个代码片段引擎。当你按下 tab 键时,它会检查最后键入的 Token 并将其扩展为代码段。为了让它发挥作用,你需要创建一个 language.snippets 文件,并在其中写入代码片段。例如,你可以创建 php.snippets,加入一个 if 代码段 if ($1) { $0 }。现在,当你在编写 PHP 代码键入 if 并按下 tab 键时,它将扩展为 if(|){},你的光标将位于|字符所在的位置。如果再次按下 tab,它将跳转到 if () { | }花括号之间的 $0 Token。

76.Undoquit

通常,你可能因为操作太快关闭了一个你不想关闭的窗口。有了这个插件,你现在可以按 ctrl+w+u 撤消关闭操作。

77.Unicode

这个插件让你可以快速搜索和插入 Unicode 字符。例如,如果你想插入一个 Unicode 兔子符号,你可以输入 rabbit,然后按下 ctrl+x ctrl+z。输入文字 rabbit 将被“兔子”的表情符号取代。

78.Unimpaired

许多命令都是成对的。例如 :bn:bp 跳到下一个 / 前一个缓冲区, :cn:cp 跳到下一个 / 前一个 quickfix 列表项, :ln:lp 跳到下一个 / 前一个位置列表项,等等。此插件为这些命令添加了灵活的快捷方式。你现在可以用 ]b[b 跳到下一个 / 前一个缓冲区,用 ]q[q 跳到下一个 / 前一个 quickfix 条目,用 ]l[l 跳到下一个 / 前一个位置列表条目,等等。

79.vimade

当你使用多个分割窗口时,在短暂的分心之后,很容易忘记你在哪个分割窗口中工作。这个插件会淡化其他所有的分割线,使当前聚焦窗口的分割线清晰可见。

80.Visual-split

通常,你需要将注释、函数定义或代码片段在上方折叠,使其始终可见。通常的方法是用 ctrl+w+s 分割窗口,然后用 10ctrl+w+- 重新调整窗口大小。这个插件合并了这两个动作。现在你可以直观地选择该区域并按下 ctrl+w+gss 。该插件将分割窗口并调整大小,使其与所选的行完全匹配。

81.Visual-star-search

有两个操作符可以搜索光标下的单词。它们是 * (向前搜索)和 # (向后搜索)。不幸的是,在可视化模式中,它们不会搜索可视化选择部分,你也不能搜索包含特殊字符的单词。例如,如果单词是 h#e#l#l#o,那么这些操作符将选择并搜索这个单词中的一个字母,这不是你想要的。

使用此插件,你可以搜索可视化选择的序列,它可以包含任何特殊字符。使用 v 命令进行选择,然后按 *# 进行搜索。

82.Writeable-search

Writeable-search 类似于 CtrlSF(见上文)。它让你可以快速查找结果并立即在结果窗口中编辑它们。当你运行 :WritableSearch pattern 命令时,它将在当前目录中的所有文件中搜索这个 pattern,并打开一个包含结果的新选项卡。然后,你可以编辑结果,当你在相同的结果窗口中执行 :w 操作时,它会更改更新文件。如果你已经在 quickfix 窗口中有一个要修复内容的列表,那么你可以通过 :WritableSearchFromQuickfix 命令将它们转移到这个插件中进行编辑。

英文原文: vim plugins that I use