获得更好编辑体验的 11 个 Pro Vim 技巧

Vim 编辑器就像大海——置身于其中美妙而快乐,但总会有你不知道的事情。

虽然您无法独自发现海洋,但您始终可以从他人的经验中学习。

我将在本文中分享一些技巧,它们将帮助您像专业人士一样使用 Vim。

我经常使用它们,并且我看到专业的 Vim 用户在各个社区分享它们。

您应该将它们添加到您的 vimrc 文件,只要适用。 使用万能的 Vim 编辑器,您将获得更好、更流畅的体验。 相信我。

1:始终使用内置帮助

我不能强调这一点。 最大和最少使用的技巧是“RTFM”(阅读 f**king 手册)。

显然,互联网是人类未开发知识的最大集体资源,但当 Stack Overflow 出现故障时会发生什么?

让自己习惯 Vim 的内置帮助是您可以为自己做的最大的帮助。

查看 Vim 内部帮助的语法如下:

字首例子语境
::help :w关于 ‘:w’ 命令的帮助
没有任何:help j关于“j”键在正常模式下的帮助
v_:help v_J关于在可视模式上下文中使用“J”键的帮助
i_:help i_<Esc>关于在上下文中使用“Esc”键插入模式的帮助
/:help /n关于搜索模式“n”的帮助

2:以普通用户打开,另存为root用户

在我编辑系统文件的记忆中,你很容易忘记添加 sudo 在 Vim 中编辑文件之前。 这将以“只读”模式打开一个文件。 这意味着你不能写任何东西给它。

但是您可能已经进行了一些重大更改。 并且可能无法记住您所做的每一次编辑。 因此,退出未保存的工作不是一种选择。

在这些情况下,在 Vim 中键入以下命令:

:w !sudo tee %

键入此命令后,将要求您输入密码 sudo 命令。 Enter 那,您的更改将被保存。

?你应该使用 sudoedit 命令而不是 sudo vim 用于编辑需要超级用户权限的文件。

让我们分解一下,了解这里发生了什么……

  • :w – 这是写命令。 由于没有给出参数,Vim 会将整个文件写入标准输出。
  • !sudo – 跑过 ‘sudo’ 命令作为 shell 命令,而不是作为 Vim 命令
  • tee – ‘tee’ 命令用于从标准输入读取并将其写入标准输出或文件
  • % – Vim 用您正在编辑的当前文件的名称替换它。

:w 命令将整个文件写入 STDOUT(标准输出)。 然后,我们使用 sudo 命令(毕竟我们编辑的是系统文件)来获取临时权限。

百分号 (%) 代表我们的文件名和 tee 命令从 STDOUT 获取 Vim 的输出并将其写入 % 文件。

这基本上可以解决 <Vim's STDOUT> | sudo tee /etc/ssh/sshd_config. 一开始有点复杂,但 Vim 也是;)

3:将所有空格转换为制表符,反之亦然

我们都喜欢使用制表符或空格。

但是,如果您正在编辑与您的偏好相矛盾的缩进文本文件怎么办?

3.1:将所有空格转换为制表符

如果当前文件打算使用空格,并且您希望将它们转换为制表符,则需要运行两个 Vim 命令。

这两个命令如下:

:set noexpandtab
:retab!

这样做会将所有空格转换为其等效的制表符。 如果文档使用两个空格作为缩进宽度,它们将被转换为 1 个制表符。 如果将四个空格用作单个缩进宽度,则这四个制表符将替换为一个制表符字符。

3.2:将所有制表符转换为空格

如果您正在编辑的文件打算使用制表符,并且您想将制表符转换为空格,则必须运行四个 Vim 命令。

:set expandtab
:set tabstop=4
:set shiftwidth=4
:retab

第一个命令(expandtab) 告诉 Vim 用空格扩展制表符。 第二条命令(tabstop) 命令使用多少个空格作为一个“缩进块”。

在我们的例子中,我们定义“1 tab = 4 个空格”。 这 shiftwidth 命令用于控制使用时的缩进 >> 运算符,这也设置为 4 个空格。

最后, retab 命令将所有制表符(用于缩进)转换为空格。

4:缩进所有行

错误的缩进行会对 Python 和 YAML 程序造成严重破坏。

缩进 全部 线条, 请按 gg 到达顶部的关键。 然后按 = 键表示“缩进”,最后按 G 表示“最后一行”的键。

跟我重复; 这是 gg=G 缩进的组合键 所有线路.

这将自动缩进(尽 Vim 的能力)从第一行到最后一行的所有行。

下面是我使用缩进 Rust 代码的演示 :gg=G 命令。

如您所见(从这个有限的预览中),所有行都正确缩进。

锦上添花的是,不必错误地缩进行就可以使用 Vim 的缩进。

5:粘贴代码时保留缩进

承认吧; 我们都至少有一次从互联网上复制粘贴的代码。 但是当你粘贴时缩进弄乱了怎么办?

为避免这种情况,将以下行添加到您的 .vimrc 文件:

set pastetoggle=<F2>

有了这个改变你 vimrc 文件,按 F2 粘贴代码之前的键。 这样做将确保您的代码粘贴正确的缩进。

6:以正确的缩进深度开始书写

这是我最近才学会的一个方便的技巧。 假设你在一行的第一列,但是你写的内容需要缩进。

你如何以聪明的方式做到这一点? 不按制表符/空格?

答案是使用 S 在普通模式下键入。

当您位于一行的第一列时,按 Esc 键进入 Normal 模式。 然后按 S (大写)键。 这会将您的光标移动到适当的缩进深度并自动进入插入模式,以便您可以开始输入。

开始在 Vim 中编写具有正确缩进深度的代码

您可以看到,在这个演示中,我的光标位于第一列,然后按 S 键,光标移动到正确的缩进深度,Vim 从正常模式切换到插入模式。

挺整洁的!

7:保存文件前显示差异

我们都去过那儿。 “我修改了这个文件,但不知道我改变了什么,现在我担心这个改变会导致意想不到的问题。”

解决这个问题的方法是查看缓冲区和文件之间的差异。

为此,请在 Vim 本身中执行以下命令:

:w !diff % -

让我们分解一下,以便您了解正在发生的事情…

  • :w 是保存/写入的 Vim 命令。 在此特定场景中,命令中未指定文件名,输出将写入 STDIN(标准输入)文件。
  • :!<command> 是执行 shell 命令的语法。 在我们的例子中,我们正在运行 diff 在我们的 shell 中执行命令。
  • % 表示当前未修改的文件的名称。 试试这个 :!echo %.
  • - 是标准输入文件 diff 命令。

所以,这个命令首先写入所有 [unsaved] 内容到 STDIN 文件。 然后 diff 命令读取当前文件 (%) 并将其与 STDIN (-) 文件。

这个命令大致相当于这个shell命令-> diff <original-file> <Vim's STDOUT>.

8:显示拼写错误

如果你从一开始就只使用 Vim,那对你有好处! 但也有人介绍过微软之类的文字处理软件 Word.

它有一个特性(或诅咒,对于非英文名字的人),其中 MS 的拼写检查器 Word 在拼写错误的单词下方放置一条红色波浪线。

Vim 中似乎“缺少”了该功能。 嗯,不完全是。

Vim 内置了一个拼写检查器。 您可以使用以下命令启用它:

:set spell

执行此操作后,您可能会看到拼写错误的单词被突出显示。 它们突出显示的方式取决于您的 Vim 配色方案。 我在这里的拼写错误的单词下面有一个白色下划线。

Vim 的拼写检查功能如何

您的里程可能会因突出显示单词的方法而异。

要使其成为默认的 Vim 行为,您可以将以下行添加到您的 .vimrc 文件:

set spell

9:显示行号

像许多 Vim 用户一样,您可能已经尝试在 Vim 中启用行号。

有两种方法来表示行号。 一是绝对行号。 在这里,您可以获得每一行的绝对编号,就像任何其他代码编辑器或 IDE 一样。

第二个是相对行号。 在这种情况下,当前行获得数字“0”,并且每隔一行获得一个相对于光标所在行的上下文的数字。

如果您两者都喜欢,但不得不做出艰难的选择,选择其中一个而不是另一个,那么您并不孤单。 但您也不必选择其中之一。 你可以两者兼得!

您可以在 Vim 中启用“混合行编号”,方法是将以下行添加到您的 .vimrc

set number relativenumber

这将显示光标所在行的绝对行号和其他行的相对行号。

下面是演示混合行编号如何工作的屏幕截图:

Vim 中的混合行编号

目前,我的光标位于第 44 行,因此该行具有绝对行号。 但是我的光标上方和下方的行相对于具有光标的行具有相对编号。

10:打开 Vim,光标位于特定行

您过去可能曾想打开 Vim 并将光标设置到特定行而不是第一行。

这可以通过使用 +linenum 选项。 下面是这样做的语法:

vim +linenum FILE

替换单词 linenum 有一个实际的数字。

将光标放在特定行上打开 Vim

在这里你可以看到我打开了 /etc/ssh/sshd_config 将光标放在第 20 行和第 50 行上。这是使用 +linenum 选项。

11:使用可读的配色方案

在使用配色方案时,人们通常会选择他们认为最有吸引力或最美观的配色方案。 但是,当您将 Vim 作为代码编辑器兼 IDE 时,最好放弃一些吸引眼球的东西,转而使用具有更好视觉指南的颜色方案。

好的配色方案只是看起来不错,但出色的配色方案可以帮助您在颜色的帮助下轻松识别关键字、变量和其他标识符。

我个人最喜欢的一些配色方案如下:

如果您不确定如何在 Vim 中使用配色方案,我们在 Linux 手册中介绍了它:)

额外提示:即使您处于插入模式,也可以删除文本

我们都知道您可以使用 dx 在普通模式下删除文本的键。 但是如果你想要类似的东西怎么办 dd 在插入模式?

在这种情况下,您可以使用以下几个键绑定:

  • Ctrl + w: 删除前一个单词(相当于 db 在普通模式下)
  • Ctrl + h: 删除前一个字符
  • Ctrl + u:删除所有前面的字符,直到行首(相当于 d0 在普通模式下)
  • Ctrl + k:删除所有前导字符,直到行尾(相当于 d$ 在普通模式下)

结论

我分享了一些我最喜欢的 Vim 技巧。 它涉及诸如缩进整个文件,在保存之前获取文件差异,在特定行打开带有光标的文件等等……

有些是较小的生产力推动力,而另一些(保存为 root 用户)可能是关键的生产力助推器。

发表评论,让我知道您将使用哪些技巧。 还有其他你引以为豪的很酷的 Vim 技巧吗? 与我们其他人分享。