0

所以我正在学习 vim/vi/ex,我认为我对缓冲系统有很好的理解。(有一个通用缓冲区,您也可以命名缓冲区)。我知道,无论何时使用 yank、change 或 delete,通用缓冲区的内容都会被覆盖。

但是,我被赋予了使用 vi/ex 命令删除缓冲区的最后 2 行的任务,我被难住了。我似乎无法通过搜索论坛或互联网找到答案,所以我想我会在这里向互联网大师寻求帮助。

有没有办法直接修改缓冲区的内容,或者答案只是粘贴缓冲区,删除最后两行然后再次拉出它?

任何帮助表示赞赏。

编辑:我想编辑这个问题以包括问题:缓冲区和寄存器之间有什么区别?

我最初认为它们本质上是相同的,但后来学到了不同的东西。

我的新理解是,我之前所说的缓冲区实际上是寄存器,根据我对计算机的了解,这更有意义。

现在,我相信缓冲区只是您正在修改的文本的当前副本。或者更具体地说,您正在处理数据的主内存区域。(所以我的问题的答案实际上只是:$-1,$d)

但是,我在这些论坛上遇到了相互矛盾的信息,这些信息正好相反,将“寄存器”称为“缓冲区”。

如果有人能澄清这一点,我将不胜感激。

编辑:vim 帮助得到了我需要的所有答案,但不能删除帖子。应该注意的是,本网站和许多其他问题的答案都得到了很高的评价,但错误地将寄存器称为缓冲区。

4

3 回答 3

3

我开始写一个冗长的答案,但我最终决定放弃它并给你你应得的答案:

:help buffers
:help registers
于 2014-03-31T22:50:31.770 回答
0

首先,在阅读了您的问题后,我很确定您所说的“缓冲区”实际上是“寄存器”。您可以在 vim 帮助中找到缓冲区和寄存器之间的区别。(其实这两个东西是完全不同的概念)

我知道,无论何时使用 yank、change 或 delete,通用缓冲区的内容都会被覆盖。

这不是真的,append如果您使用注册,您可以满足A-Z注册。

有没有办法直接修改缓冲区(寄存器)的内容...删除最后两行然后再拉一次?

是的,有办法。您可以通过 访问和修改寄存器的内容@x。您可以通过简单地更改内容let @a='newValue'

以您的示例为例,如果要删除最后两行:

:let @a=join(split(@a,'\n')[0:-3],"\n")."\n"

然后您可以"ap从 register 粘贴修改后的内容a

有内置函数setreg(),也可以改变寄存器的值。如果您想使用它,请查看它的帮助文档。

于 2014-03-31T20:46:07.907 回答
0

如何粘贴缓冲区,删除最后两行,然后再次拉出它?

秘诀是使用''`]标记。

p`]dky''

如需更多帮助,请参阅:

:h ''
:h `[
于 2014-03-31T21:11:20.967 回答