题
我是一名 C# 开发人员,最近决定扩展我对可用工具的了解。我决定学习的第一个工具是 Vi/Vim。到目前为止,一切都很顺利,但有几个问题我似乎找不到答案:
假设我想删除一系列行。我知道有很多方法可以做到这一点,但我想通过行号来做到这一点。我认为这与替代命令的工作方式类似,例如
81,91y
. 。有没有办法做到这一点?我有点困惑
g
正常模式下的命令。它似乎做了很多事情,但我无法真正确定 g 命令的核心功能。我很困惑它是运动命令还是通过正常模式运行的其他命令的“全部捕获”。有人可以解释一下这一点,或者给我指出一个可以很好解释的参考文献吗?g
命令?
解决方案
猛拉线 81-91
:81,91y<enter>
如果您的手指不喜欢找到 :
和 ,
键,这也可以(转到第 81 行,猛拉 11 行)
81gg11yy
我唯一使用的 g
是 5gg
. 。去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
.