如何简化Vim中的"复制和粘贴"?

Ale*_* DS 22 vim editor

我发现在VIM中复制和粘贴的过程非常棘手:

  • 视觉模式
  • ÿ
  • p(或班次p)
  • 插入模式

如果您错误地使用" 删除 "键,您丢失了内容(由您删除的字符替换),您必须重新复制它!

我几个月来一直在研究vim,我喜欢它,但我讨厌复制和粘贴,还有一种简化方法吗?或者其他选择?

谢谢

Dav*_*own 17

Vim维护了您在编号寄存器中进行的最后9次删除的列表.因此,"0p将粘贴您最近拉出的东西,"1p粘贴您已删除或更改的第二个最近的东西(请注意,这不包括简单地被拉动的文本),依此类推寄存器2-9.

如果你想使用超过最近9个被删除的项目,或者如果你想要一个简单的方法来访问以前的yanks我会推荐yankring插件,除其他外,它可以让你看到你的最后100个猛拉并选择你要粘贴的那个用:YRShow命令.

最后,如果要在不离开插入模式的情况下粘贴,可以使用Ctrl-R插入任何寄存器的内容.因此,在插入模式下,键入<Ctrl-R>"将插入未命名寄存器的内容"(当没有指定寄存器时,这是放置文本的位置).

  • 你的意思是"0p","1p"等吗? (2认同)
  • +1我已经使用gVim好几年了,但我都不熟悉编号寄存器和Ctrl-R. (2认同)

Jas*_*own 11

虽然不完全"简化",但您可以选择将文本复制到与默认情况下删除的文本不同的寄存器中.这可以防止您因意外删除某些内容而丢失您复制的内容.

要复制到注册a(作为示例),您将执行以下操作:

" a y [movement command]

然后粘贴您的文本:

" a p

还有一件事你也可以做.如果要在插入模式下粘贴,可以按ctrl+ o然后输入粘贴命令(例如上面提到的寄存器粘贴命令).的ctrl+ o命令等同于按下esc,但对于一个单命令.在这里阅读更多相关信息.

最后,您总是可以选择编写一个vim脚本来根据自己的喜好更改默认行为(或者找一个插件,例如yankring).


UPDATE

基于评论中的对话kellogs,我决定研究如何使用任何寄存器进行复制/粘贴,但是在可视模式下进行复制命令(更容易直观地看到你正在抓取的内容).事实证明这是可能的.

要复制到注册a,但在可视模式下:

v (进入视觉模式)

然后你做同样的事情,但首先做移动命令:

[movement command] "ay(通过移动命令突出显示您的选择,然后进入注册a).

粘贴是按照UPDATE上面列出的正常方式完成的.


ZyX*_*ZyX 7

当你删除某些内容时,Vim并没有完全抛弃被删除的文本,它只是覆盖"寄存器.最后抽取的文本总是存储在寄存器中0,因此您可以在工作流程中替换p,"0p或者更好地,p将其映射到并使用它:

nnoremap ,p "0p
xnoremap ,p "0p
Run Code Online (Sandbox Code Playgroud)

另一种方法是扔掉删除的文字(它删除黑洞寄存器_)"_dd,"_x等等.我个人使用,d映射:

nnoremap ,d "_d
xnoremap ,d "_d
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Vim不会覆盖任何寄存器.

第三是使用字母寄存器,正如@Jason Down建议的那样.