如何在VPS上使用Vim对纯文本或代码进行高级编辑

来自菜鸟教程
跳转至:导航、​搜索

介绍


Vim是对经典vi文本编辑器的改进,在编辑代码和纯文本方面非常强大。 虽然一开始它可能看起来很迟钝和困难,但由于它的语言类似于命令语法,它是编辑文本的最有效方法之一。

在之前的文章中,我们讨论了 如何安装 vim 并进行基本编辑 。 在本文档中,我们将继续介绍更高级的主题,这些主题可能有助于展示编辑时可用的多功能性。

我们假设您已经安装了 vim 并且熟悉上面链接的文章中讨论的基本移动和编辑命令。

高级导航


在开始新材料之前,让我们回顾一下我们在上一篇文章中学到的一些导航:

  • 基本动作
    • h:左
    • l: 对
    • j: 下
    • k: 向上
  • 其他运动
    • gg:文档顶部
    • G:文档底部或行号,如果数字放在 G 前面
    • w:下一个词
    • e:词尾
    • 0:行首
    • $:行尾

正如你所看到的,我们已经有相当多的移动命令可供我们使用。 但是,我们也可以通过其他方式指导运动。

我们可以使用以下命令将光标移动到页面当前可见部分的不同区域:

  • H:将光标移动到当前可见页面的顶部(认为“高”)
  • M:将光标移动到当前可见页面的中间
  • L:将光标移动到当前可见页面的底部(认为“低”)

如果我们想移动页面而不是光标(如滚动),我们可以使用这些命令:

  • CTRL-D:向下翻页
  • CTRL-U:上一页
  • CTRL-E:向下滚动一行
  • CTRL-Y:向上滚动一行

我们还可以通过信息的逻辑块进行导航。 如果您输入的是常规文本而不是代码,这会很有用。 这些类似于单词和行导航命令。

  • ):移动到下一句的开头
  • (: 移动到最后一句的开头
  • }:移动到下一段的开头(由空行分隔)
  • {:移动到最后一段的开头(由空行分隔)

您还可以在文件中定义自己的点来跳转。 您可以在文件中的任何位置设置 marks。 然后,您可以参考这些标记以跳转到该点或将该点传递给接受移动的命令:

  • m:键入“m”后跟一个字母会创建该字母的标记引用。
    • 小写字母特定于当前文档,而大写字母只能使用一次(它们可用于跳转到不同文档中的部分。
  • '':单引号后跟一个标记字母(之前用上面的“m”定义),会将光标移动到包含该标记的行的开头。
  • `:反引号后跟一个标记字母会将光标移动到标记的确切位置。

这些命令允许您放置标记,然后在当前位置和标记之间定义的区域上拉动、删除或格式化。 这允许对编辑选项进行非常细粒度的控制。

如何管理文件


通常,当您工作时,无论是在软件项目还是学期论文上,您都希望能够一次引用多个文档。 Vim 有几种不同的方法来做到这一点,这取决于你希望如何工作。

如何管理缓冲区


管理多个文件的一种方法是通过 buffers。 缓冲区通常表示打开以进行编辑的文件。 它们基本上是 vim 目前已经打开并且可以轻松访问的所有内容。

我们用 vim 像这样打开多个文件:

vim file1 file2 file3

这些文件中的每一个都在自己的缓冲区中打开。目前,我们只能看到第一个文件。

我们可以通过输入 :buffers 来查看我们有哪些可用的缓冲区。

:buffers

:buffers
  1 %a  "file1"             line 1
  2     "file2"             line 0
  3     "file3"             line 0
Press ENTER or type command to continue

如果我们想检查下一个缓冲区,我们可以输入 :bn。 这将更改为下一个缓冲区。 类似地,我们可以通过输入 b 后跟数字或名称来按数字(在上面的第一列中)或名称切换到缓冲区。 即使文件名不完整,这也有效。

以下是一些管理缓冲区的命令:

  • :buffers: 列出可用的缓冲区
  • :ls: 同上
  • :bn:切换到下一个缓冲区
  • :bp:切换到上一个缓冲区
  • :bfirst:切换到第一个缓冲区
  • :blast: 切换到最后一个缓冲区
  • :bdelete:删除当前缓冲区
  • :badd:打开一个新的缓冲区,文件名如下
  • :e:编辑新缓冲区中的另一个文件并切换到它。

如何管理 Windows


vim 用于管理多个文件的单独控制机制是 windowsviews 的概念。 这允许您将当前编辑区域拆分为不同的窗口,以便您可以同时查看多个缓冲区。

要将当前工作区拆分为单独的窗口,您可以键入 :split:sp。 这将在当前窗口上方打开一个新窗口并将焦点更改为该窗口。 您可以使用上面显示的缓冲区命令更改新窗口中显示的缓冲区。

以下是我们可以用来创建和管理窗口的一些命令:

  • :sp:将当前窗口一分为二。 最初将在每个窗口中显示相同的缓冲区。
    • 在“sp”前面加上一个数字来设置新的窗口高度。
  • :vs:垂直分割当前窗口。 最初将在每个窗口中显示相同的缓冲区。
    • 在“vs”前面加上一个数字来设置新的窗口宽度。
  • CTRL-ww:将焦点切换到下一个窗口
  • CTRL-w(movement):将焦点改变到指定方向(h,j,k,l)的窗口
  • CTRL-wc:关闭当前窗口
  • CTRL-w+:增加当前窗口大小
  • CTRL-w-:减小当前窗口的大小
  • CTRL-w=:设置所有窗口大小相等
  • #CTRL-w_:将高度设置为前面“#”指示的大小
  • :only: 关闭除当前窗口以外的所有窗口
  • CTRL-wn:打开一个带有新缓冲区的新窗口

如何管理标签


在 vim 中管理多个文档的第三个概念是 tabs。 与许多程序不同,在 vim 中,选项卡可以包含窗口,而不是相反。 选项卡可以包含窗口,这些窗口充当缓冲区的视口。

我们可以分别管理每个选项卡的窗口布局。 要创建标签,我们可以使用 :tabnew 命令打开一个新标签。

管理选项卡的一些简单方法是:

  • :tabnew: 打开新标签
  • :tabclose: 关闭当前标签
  • :tabn: 切换到下一个标签
  • gt:切换到下一个标签
  • :tabp: 切换到上一个选项卡
  • gT:切换到上一个标签
  • :tab ball:打开各个选项卡中的所有缓冲区
  • :tabs: 列出所有可用的标签

随着缓冲区、窗口和选项卡的移动,有时会让人混淆您当前正在查看的文件。 找出您当前正在查看的文件名的一种快速方法是键入:

  • CTRL-g:显示当前文件名

文档特定命令


根据您处理的文档类型,vim 具有某些可能对您有所帮助的功能。

纯文本


如果您正在编辑纯文本文档,vim 可以通过多种方式为您提供帮助。 此功能必不可少的功能之一是拼写检查。

要在 vim 中打开拼写检查,你可以输入:

:set spell

要设置正在使用的语言,您可以键入:

:set spelllang=[language abbreviation]

现在,将检查您的文档的拼写。 正常的波浪线将出现在拼写错误的单词下方。 这就是你使用它的方式。

要在拼写错误的单词之间来回跳转,请键入:

]s    # Jump to next mistake
[s    # Jump to previous mistake

光标悬停在拼写错误的单词上后,您可以通过键入以下内容查看拼写建议:

z=

这将为您提供可能匹配的列表。 您可以通过选择关联的数字来选择所需的选项,也可以按 ENTER 以保持单词不变。

如果要将单词标记为 而不是 拼写错误,可以将其添加到拼写列表之一。 Vim 维护两个拼写列表,一个常规列表和一个将用于当前会话的临时列表。

要将单词添加到“好”单词列表中,请使用以下命令之一:

zg    # Adds word to regular dictionary
zG    # Adds word to the current session dictionary

如果您不小心添加了一个单词,您可以通过转到该单词并键入以下内容来删除它:

zug   # Remove word from regular dictionary
zuG   # Remove word from the current session dictionary

如果您发现自己不得不经常输入长词组,您可以添加缩写词。

如果我们输入 :ab 后跟一个缩写和一个扩展,每当我们键入缩写后跟一个空格时,vim 都会输入扩展。

例如,如果我们是按照 Richard Stallman 的例子来纠正“Linux”与“GNU/Linux”的任何用法的坚持者,我们可以创建一个自动执行此操作的缩写:

:ab Linux GNU/Linux

现在,当我们输入“Linux”时,vim 会自动替换为“GNU/Linux”。

Linux is an operating system.

更改为:

GNU/Linux is an operating system.

但是,如果我们发现自己专门谈论内核,只有 Linux 这个词是合适的,我们可以通过在输入空格之前输入 CTRL-V 来取消扩展。

GNU/Linux is an operating system with Linux(CTRL-V) as a kernel.

如果我们不再希望使用此缩写,可以使用以下命令将其删除:

:una Linux 

现在我们的“Linux”将仍然是“Linux”。

您可能不时需要做的另一件事是插入传统 qwerty 键盘上没有的字符。 我们称这些为“有向图”。 您可以通过键入以下内容查看 vim 的有向图列表:

:digraphs

NU ^@  10    SH ^A   1    SX ^B   2    EX ^C   3    ET ^D   4    EQ ^E   5
AK ^F   6    BL ^G   7    BS ^H   8    HT ^I   9    LF ^@  10    VT ^K  11
FF ^L  12    CR ^M  13    SO ^N  14    SI ^O  15    DL ^P  16    D1 ^Q  17
D2 ^R  18    D3 ^S  19    D4 ^T  20    NK ^U  21    SY ^V  22    EB ^W  23
CN ^X  24    EM ^Y  25    SB ^Z  26    EC ^[  27    FS ^\  28    GS ^]  29
RS ^^  30    US ^_  31    SP     32    Nb #   35    DO $   36    At @   64

现在,您可以通过键入 CTRL-k 和左栏中的两个字母来插入右栏中的任何字符。

例如,在我的电脑上,要输入英镑符号,我可以在插入模式下输入:

CTRL-k Pd

£

源代码


如果您正在编码,有许多不同的东西可以帮助您与代码进行交互。

最基本的方法之一是语法高亮。 您可以通过键入以下内容启用语法突出显示:

:syntax on

这应该根据检测到的文件扩展名为您的文件设置语法突出显示。 如果您想更改突出显示的语言,可以通过以下方式设置语言:

:set filetype=[language]

如果您想使用系统实用程序来修改文件中的某些行,可以在正常模式下使用 ! 命令调用它。

该命令接受一个动作,然后将其发送到后面的命令。

![motion] filter

例如,要对从当前位置到文件末尾的行进行排序,您可以键入:

!G sort

Sort 是一个 Linux 命令,默认按字母顺序对输入进行排序。

如果我们想将命令的输出插入到文件中,请导航到您想要输出的空白行。 类型:

!!command

这会将指定命令的输出放入文档中。

如果我们想查看命令的结果,但不想将其插入到文档中,我们也可以使用命令模式 (:) 版本,即:

:!command

这将向您显示命令的结果,但完成后将返回您未更改的文档。

减少重复


通常在编辑或创建任何类型的文件时,您会发现自己在重复许多相同或相似的操作。 幸运的是,vim 提供了一些将命令组保存到宏中的方法。

要开始录制宏,您可以键入 q 后跟一个字母来引用宏。

qa    # will save macro "a"

您键入的任何命令现在都将被记录为宏的一部分。 要结束宏,您可以再次键入 q

所以如果我们输入:

qa0c3wDELETED<esc>q

这将启动一个宏(另存为“a”),转到行首,并将接下来的三个单词替换为单词“DELETED”。 然后它退出插入模式并结束宏。

要播放此宏,从当前光标位置开始,使用 @ 字符,后跟宏引用:

@a

这将重播从当前位置开始的宏命令。

如果我们希望创建一个以插入模式结束的宏,我们必须以不同的方式结束宏(键入“q”只会插入 aq)。 我们可以在插入模式下执行普通模式命令,方法是在它前面加上 CTRL-O

因此,如果我们想改变这一行第一个括号的内容,你可以有一个宏说:

qi0f(lct)<CTRL-O>q

这将创建一个宏“i”。 宏移动到当前行的开头。 然后它找到左括号并向右移动一个字符(移动到括号内)。 然后它会更改所有内容,直到右括号。 在 vim 处于插入模式等待替换文本时,我们按 CTRL-O 然后按 q 结束宏,让我们处于插入模式准备替换文本。

结论


您现在应该对 vim 可以帮助您的一些更复杂的方法有所了解。 虽然这看起来很多,但这只是表面上的问题。

有很多我们没有接触过的功能,你不需要什么都知道。 根据您选择使用 vim 的方式,您将了解什么是重要的。 每天练习和使用的次数越多,感觉就越自然,它会变得越强大。

贾斯汀·艾林伍德