如何在vim的ex模式下从缓冲区粘贴?

8

我在从文件中复制某些文本并将其复制到新的分割窗口时遇到了问题。
3yy|new|p

在命令模式下它是有效的。

当我在复制后在分割窗口中按下'p'时,它就有效了。


这个问题更适合发布在http://unix.stackexchange.com。 - SurvivalMachine
2
@SurvivalMachine 这个讨论已经进行过了:Vim问题:它们属于Stack Overflow还是Super User?,甚至在SU上也有类似的问题:关于vi、vim和其他克隆版本的问题是否适用于此处?。简而言之,Vim作为一种编程工具是受欢迎的。 - sehe
3个回答

5

我理解你想要:

  1. 复制当前缓冲区中的当前行和下面两行,
  2. 在新的水平分屏中打开一个空白缓冲区,并且
  3. 将这三行粘贴到空白缓冲区中。

是这样吗?

我不明白为什么你要在 Ex 模式下执行这个操作,因为在正常模式下这么简单(并且有效):

3yy
:new<cr>
p

我认为你混淆了可以通过 Q 访问的 ex 模式和可以通过 : 访问的 命令 模式。你可能还混淆了 :p[rint] 命令和 :pu[t] 命令。

正常模式开始执行以下操作:

:.,+2y|new|put!

了解一下,您也可以直接将这三行代码写入文件中:

:.,+2w filename

2
你的意思应该是 :.,+2y| - ZyX
是的。不知怎么回事,我的手指打错了。谢谢。 - romainl

2
你可以使用以下其中一种方法在 Vim 中从剪贴板复制: "+p "*p SHIFTINSERT 使用哪一种方法取决于你的环境。
如果你使用 gVim 或 MacVim,你需要使用 "+p 如果你从命令行使用 Vim,你需要使用 "*p 如果你处于插入模式或 Ex 模式(我想是这样),你需要使用 SHIFTINSERT 插入模式指的是键盘上靠近 HOMEPAGE UPDELETE 的键。
说明:
  • " 表示你将要指定一个 寄存器
  • 有26个自定义寄存器 - 每个字母对应一个寄存器
  • 还有许多其他的寄存器(请查看此处
  • +" 指代 未命名缓冲区,代表系统剪贴板
  • p 是普通的粘贴命令

关于缓冲区的更多信息:

如果你想要,可以在不同的缓冲区中存储不同的文本。

要将3行复制到名为x的缓冲区中,请使用以下命令:

"x3yy

要在光标上方粘贴名为y的缓冲区的内容:

"yP


谢谢……但是如果我想要将特定行存储到缓冲区中……比如从第3行到第8行……那么我应该使用哪个命令呢……? - Tushar Mishra
在gVim或MacVim中,您可以使用"+y进行复制。在命令行中使用Vim时,您可以使用"*y(或其他变体的复制命令)。 - jahroy
我从未遇到过这种情况。这些命令应该在命令模式下使用。如果你在 ex 模式下,我相信你想要使用 SHIFT-INSERT 来粘贴。 - jahroy
切换到file2,复制这些行,然后回到file1并粘贴它们。您可以像这样打开file2::e file2。您可以使用_SHIFT-5_在两个文件之间切换。这就是我会做的方式。我不知道如何在ex模式下从一个文件中执行此操作。这不是我曾经经历过的工作流程。我只是将文本存储在缓冲区中并在文件之间跳转。 - jahroy
@TusharMishra - 这是一个非常棒的答案,其中包含有关寄存器的大量信息:https://dev59.com/YW865IYBdhLWcg3wFqdV - jahroy
显示剩余4条评论

0

p只是vi命令,所以在ex中应该使用pu。 或者你可以用双引号"p"npn代表缓冲区寄存器中的数字,"2p表示你最近复制的第二个文本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接