网站搜索

为每个 Linux 管理员提供的 8 个有趣的“Vi/Vim”编辑器提示和技巧 - 第 2 部分


在本系列的上一篇文章中,我们回顾了 7 个提示和技巧,可帮助您增强 vi/m 技能。除了前面给出的原因之外,学习如何在 Linux 中有效使用文本编辑器是系统管理员或工程师的一项基本能力,也是通过任何主要 Linux 认证计划(例如 LFCS、LFCE、RHCSA 和 RHCE)所需的能力。

也就是说,让我们开始吧。

提示 #8:创建水平或垂直窗口

此技巧由我们的一位读者 Yoander 在第 1 部分中分享。您可以启动具有多个水平或垂直分区的 vi/m,以在同一主窗口内编辑单独的文件:

使用两个水平窗口启动 vi/m,test1 位于顶部,test2 位于底部

vim -o test1 test2 

使用两个垂直窗口启动 vi/m,左侧为 test3,右侧为 test4

vim -O test3 test4 

您可以使用通常的 vi/m 移动例程将光标从一个窗口切换到另一个窗口(h: 向右、l: 向左、j:底部,k:顶部):

  1. Ctrl+w k – 顶部
  2. Ctrl+w j – 底部
  3. Ctrl+w l – 向左
  4. Ctrl+w h – 右

提示 #9:将字母、单词或整行更改为大写或小写

请注意,此技巧仅适用于 vim。在下面的示例中,X 是一个整数。

  1. 要将一系列字母更改为大写,请将光标置于第一个字母上,然后在 ex 模式下键入 gUX,最后按键盘上的向右箭头。
  2. 要更改 X 个单词,请将光标放在单词的开头,然后在 ex 模式下键入 gUXw
  3. 要将整行更改为大写,请将光标置于该行的任意位置,然后在 ex 模式下键入 gUU

例如,要将整个小写行转换为大写,您应该将光标放在该行的任意位置并输入gUU

例如,要将2个大写单词转换为小写,您应该将光标放在第一个单词的开头并输入gu2w

提示 #10:在 INSERT 模式下删除字符、单词或行首

虽然您可以在 ex 模式下一次删除字符或多个单词(即 dw 删除单词),但您也可以在插入模式下执行此操作,如下所示:

  1. Ctrl + h:删除光标当前所在处的前一个字符。
  2. Ctrl + w:删除光标当前所在处的上一个单词。为了使其正常工作,光标必须放置在需要删除的单词后面的空白处。
  3. Ctrl + u:删除从光标所在位置左侧字符开始的当前行。

提示 #11:将现有行移动或复制到文档的另一行

虽然您确实可以在 ex 模式下使用众所周知的 dd、yy 和 p 命令分别删除、复制和粘贴行,但仅当光标放置在您想要执行这些操作的位置时才有效。好消息是,使用复制移动命令,无论光标当前放置在何处,您都可以执行相同的操作。

在下一个示例中,我们将使用 Terri Nicole Tharrington 的一首名为“Forever”的短诗。首先,我们将让 vim 显示行号(命令模式下的 :set nu – 将此视为额外提示)。我们将使用 :3copy5 (也在命令模式下)将第 3 行复制到第 5 行下方:

现在,撤消上次更改(Esc + u - 另一个额外提示!)并输入 :1move7 将第 7 行替换为第 1 行。请注意第 2 行到第 7 行是如何移动的上,原来的第 1 行现在占据第 7 行:

提示 #12:对按模式搜索产生的匹配项进行计数,并从一个匹配项移动到另一个匹配项

本技巧基于替代命令(本系列第 1 部分中的技巧#7),但它不会删除任何内容,因为替代行为被n 选项,得出指定模式的出现次数:

确保不要遗漏任何正斜杠!

:%s/pattern//gn 

例如,

:%s/libero//gn

要在 ex 模式下从一个出现的模式移动到下一个出现的模式,请按 n(小写 N)。要移至上一个实例,请按N

TIP #13:在指定行直接打开 vi/m

默认情况下,当您启动 vi/m 时,光标最初放置在编辑的最后一行。如果你想打开程序并让光标直接放在指定行上,可以使用以下技巧:

vim filename +line_number

例如,打开 forever.txt 并将光标置于第 6 行:

vim forever.txt +6

让我们稍微调整一下这个例子。假设我们要在模式第三次出现的行上打开文件:

vim filename +$(grep -in pattern filename | sed -n 3p | cut -d: -f1)

让我们仔细看看上面的命令做了什么:

  1. grep -in 模式文件名 – 显示文件名中出现模式的所有行,并在每个输出行的开头显示行号。
  2. sed -n 3p – 显示前面管道输出的第三行。

最后,

  1. cut -d: -f1 返回上一个管道的第一个字段,冒号 (:) 是字段分隔符。
grep -in forever forever.txt
grep -in forever forever.txt | sed -n 3p
grep -in forever forever.txt | sed -n 3p | cut -d: -f1

然后将上一个命令的结果传递给 vi/m 以在指定行打开程序。

提示 #14:自定义您的 vi/m 环境

如果您使用 vi/m 编辑配置文件或编写代码,您将希望能够在第一次打开程序时显示行号并设置自动缩进,以便在按 Enter 时 键,光标将自动定位到合适的位置。此外,您可能需要自定义选项卡占用的空白数量。

虽然您可以在每次启动 vi/m 时执行此操作,但在 ~/.vimrc 中设置这些选项会更容易,以便自动应用它们:

set number
set autoindent
set shiftwidth=4
set softtabstop=4
set expandtab

有关自定义 vi/m 环境的更多选项,您可以参阅在线 vim 文档。

提示 #15:使用 vimtutor 获取常规 Vim 帮助/选项

如果您在任何时候需要提高一般 vi/m 技能,您可以从命令行启动 vimtutor,它将显示完整的 vi/m 帮助,您可以随时参考无需启动网络浏览器来搜索如何在 vi/m 中完成特定任务。

vimtutor

请注意,您可以导航或搜索 vimtutor 的内容,就像在 vi/m 中导航常规文件一样。

概括

在这个由 2 篇文章组成的系列中,我分享了一些 vi/m 提示和技巧,它们应该可以帮助您在使用命令行工具编辑文本时更加有效。我确信您一定还有其他的 - 所以请随时使用下面的表格与社区其他人分享。一如既往,也欢迎提出问题和意见。