在不清除寄存器的情况下执行某些操作


30

通常,在配置文件中,我可能会复制并粘贴一行行,然后我希望对该行进行一些小的更改。粘贴后,我x用来删除要删除的字符,然后继续粘贴下一个块。除了x将已删除的字符放在剪贴板上之外,因此我不得不再次重新复制行块。

有没有一种方法而无需进入插入模式?


Answers:


35

您的选择是:

  1. 使用黑洞寄存器_。例如,要删除一行,您可以输入"_dd。这将删除而不影响剪贴板。
  2. 显式地命名原始猛禽的寄存器。例如,要将行拉到命名寄存器中,您将输入"ayy然后粘贴将输入"ap
  3. 使用yank寄存器取回原始yank。您可以拉动,然后根据需要删除,然后在粘贴时输入"0p
  4. 使用vim-easyclip之类的插件来提供与delete运算符不同的cut运算符(完整披露:我曾写过)

运行:help registers有关前3个的更多详细信息


4
x我就用"_x吗?
durron597

1
没错
Steve Vermeulen'2

2
@ durron597,如果您一次使用删除一个字符x,则可能应该学会运动删除,例如dt)删除,直到其下一个右括号d2W删除下两个空格分隔的标记。然后您可能会"_di{在支撑区域内做类似的事情,这是我一直在做的事情。在正常模式下,该手段“ 删除一切里面这个支撑体系区域进入黑洞
OregonTrail

添加nnoremap x "_x到我的位置~/.vimrc(在这里进行说明:stackoverflow.com/questions/54255/…)。
维多利亚·斯图尔特

11

x不会将东西放在剪贴板上,而是将它们放入寄存器中。如果您不告诉它要放入哪个寄存器,则会将其放入未命名的寄存器,这当然会覆盖之前的内容。因此,相反,告诉它要使用哪个寄存器:" REGISTER x,其中REGISTER是任何单个字母。然后,您使用相同的quote-register前缀p从该寄存器粘贴。(注意:小写字母替换其内容;大写字母追加)。

还有两个特殊的寄存器"0"1"0是最近被选中的(y)文本,即使您使用其他命令(例如x)删除了一些文本,该文本也将保留。"1是最近删除的文本,只要该文本不小(一行)即可。删除的小文字会进入"-

最后,正如Steve Vermeulen指出的那样,您可以通过指定黑洞寄存器告诉vim不要保存已删除的文本"_

相关的帮助命令是:help registers


3

:let命令将允许您重新定义命名寄存器。在vim的命令行中,按Control+ R 两次1,然后寄存器名称会将寄存器的内容粘贴到命令中。然后,您可以修改其粘贴内容,并保存修改后的寄存器。

例:

  • 在正常模式下,在包含文本“ Foo Bar”的行上,"fyy将整行(yy)输入到f寄存器("f)中。
  • 类型:let @f=',和Control+ rControl+ r一遍,然后f,你应该看到它粘贴到“富酒吧”,让您的命令行现在如下所示:let @f='Foo Bar,用光标在最后。
  • 现在,您可以使用箭头和删除键来编辑刚刚粘贴的内容,例如:let @f='foo bar baz
  • 结束报价::let @f='foo bar baz'并点击Enter

现在,您已经将f寄存器的内容重新定义为“ foo bar baz”。

(这也适用于宏!:help let有关更多信息。)


1 Control + r让您可以在已经处于插入模式的情况下插入寄存器,就像在键入字符一样。两次使用此序列很重要,因为“文本是按字面意思插入的,而不是像键入的那样。当寄存器包含类似的字符时,这是不同的<BS>。” — insert.txt vimdoc,:help i_CTRL-R_CTRL-R


0

"_@derobert提到的黑洞寄存器有关,您可以在http://vimcasts.org/episodes/meet-the-yank-register/中找到有用的截屏视频。

Vim使用术语delete,yank和put代替了更标准的术语剪切,复制和粘贴。以相同的字母开头,放置和粘贴很容易互换。一旦您习惯了yank这个词,它就会成为copy的同义词。但是Vim使用'delete'这个词是有问题的。在大多数情况下,'delete'意味着删除。但是Vim的删除操作将文本复制到寄存器中,然后将其从文档中删除。换句话说,Vim的删除操作就像剪切一样。


2
这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方发表评论-您可以随时对自己的帖子发表评论,一旦您拥有足够的声誉,就可以在任何帖子中发表评论
jamessan 2015年

我尝试对原始帖子发表评论,但无法。有唯一的选择我是一个我选择了@jamessan
马龙莱昂

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.