我是一名 C# 开发人员,最近决定扩展我对可用工具的了解。我决定学习的第一个工具是 Vi/Vim。到目前为止,一切都很顺利,但有几个问题我似乎找不到答案:

  1. 假设我想删除一系列行。我知道有很多方法可以做到这一点,但我想通过行号来做到这一点。我认为这与替代命令的工作方式类似,例如 81,91y. 。有没有办法做到这一点?

  2. 我有点困惑 g 正常模式下的命令。它似乎做了很多事情,但我无法真正确定 g 命令的核心功能。我很困惑它是运动命令还是通过正常模式运行的其他命令的“全部捕获”。有人可以解释一下这一点,或者给我指出一个可以很好解释的参考文献吗? g 命令?

有帮助吗?

解决方案

猛拉线 81-91

:81,91y<enter>

如果您的手指不喜欢找到 :, 键,这也可以(转到第 81 行,猛拉 11 行)

81gg11yy 

我唯一使用的 g5gg. 。去5号线。 22gg:22号线。正如 jimbo 所说,它实际上只是其他一些命令的修饰符。

为了完整起见,(http://vim.wikia.com/wiki/Power_of_g)解释了很多如何 g 在命令模式下工作。

其他提示

您还可以使用“t”将当前行复制到当前光标位置。

:81,91t.<enter>

这会将第 81-91 行粘贴到光标所在行的下方。

我从那里学到了这一点 http://vimcasts.org 这是 VIM 上的优秀资源。

我还喜欢使用 vim 的相对行号选项,这意味着我只需输入:

:-10,-7ya a

将文本拉入命名缓冲区 a。

注意:指定 A 会将您要拉取的内容附加到缓冲区 a 的当前内容。

不要忘记您还可以使用类似的命令复制文本块并移动文本块:

:-10,-7co .

表示将当前行上方10行的四行文本复制到当前行下方,并且

:-10,-7mo .

表示将四行文本从当前行上方移至下方 10 行。

G 命令转到某个行号(如果它伴随有计数值)。 81G 让您转至第 81 行。

y 命令可以与运动相结合,例如 G. 。因此,要将所有内容拉到第 91 行,您可以使用 y91G.

一起你会得到:

81Gy91G

转到第 81 行,然后在转到第 91 行时猛拉。

g 它本身不做任何事情。它是包含一堆不相关命令的几个元命令之一。

z 是另一个类似的命令。

维姆的 :help index 描述 g 作为:

|g|             g{char}            extended commands, see |g| below

向下滚动(或 :help g) 获取列表。

最好的解决方案是按 v 进入“视觉模式”。选择行后,只需按 y 复制它们。然后按 p 粘贴复制的行。

此外 :91,96y a 哪个猛拉(y) 将第 91 行到第 96 行写入寄存器 a,(粘贴为 "ap),拉出的线可以是 附加的 到寄存器:

:91,96y A

IE。的大写 A 寄存器会导致对寄存器进行追加操作 a 而不是覆盖。寄存器的大写总是这样工作的,例如 :let @A=';' 附加一个 ; 注册 a.

使用相对于当前光标位置的加号 (+) 或减号 (-) 参考线:

:-10,+10y b

IE。它会猛拉(y) 当前光标位置周围21行并将它们放入寄存器中 b.

缺少输入实际上也代表当前光标位置,这意味着:

:-5,y a

会将上面 5 行到当前光标位置的文本拉入命名缓冲区 a, , 和:

:,+5y a

将当前光标位置之后的 5 行拉入缓冲区 a.

笔记:如果缓冲区中有宏 a 它只是被之前的 yank 覆盖,因为 yank 寄存器和宏寄存器实际上是同一件事。这就是为什么,巧合的是,您可以粘贴宏,对其进行编辑,然后将其拉回到寄存器中。我个人使用左手触及的字母进行猛拉,使用右手触及的字母进行宏。

移动文本块,如下所示:

:+10,+13m.

表示将当前光标前 10 行的四行移动到当前行下方。

附录

我之前很困惑 ya:91,95ya a 某种程度上是同义词 ya{motion} 该动议的提出者是 91,95. 。这是不正确的,其中的“a” ya 完全没有必要。在我的辩护中,我的 help yank 并没有传达这一点 ya 是一个可能的别名 yank.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top