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

是否有一种方法可以不进入插入模式?

评论

Jasper在Stack Overflow上发现了类似的问题:[有什么方法可以删除vim而又不覆盖您的上一个步骤? [duplicate]](stackoverflow.com/questions/3638542/…)而在vim中,有没有一种方法可以在不将文本放入寄存器的情况下进行删除?

#1 楼

您的选择是:


使用黑洞寄存器_。例如,要删除一行,您可以输入"_dd。这将删除而不会影响剪贴板。
为原始yank明确命名一个寄存器。例如,要将行拉到命名寄存器中,您可以键入"ayy,然后粘贴,则可以键入"ap

请使用yank寄存器检索原始的yank。您可以拉动,然后根据需要删除,然后在粘贴时键入"0p

使用诸如vim-easyclip之类的插件来提供与delete运算符不同的cut运算符(完整说明:写道)

运行:help registers以获得有关前三个的更多详细信息

评论


所以对于x我会使用“ _x”?

–durron597
15年2月3日,19:43

没错

– Steve Vermeulen
2015年2月3日,19:44

@ durron597,如果您一次使用x删除一个字符,则您可能应该学习运动删除(dt)之类的删除操作,直到删除d2W的下一个右括号为止,然后删除后面两个空格分隔的标记。然后,您可能会执行类似“ _di {在支撑区域内的操作,这是我一直在做的事情。在正常模式下,这意味着”将“将该支撑区域内的所有内容删除到黑洞中”。

–俄勒冈跟踪
2015年11月5日在1:21



在我的〜/ .vimrc中添加了nnoremap x“ _x(说明在这里:stackoverflow.com/questions/54255/…)。

–维多利亚·斯图尔特(Victoria Stuart)
18/12/20在17:02

#2 楼

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

还有两个特殊寄存器"0"1"0是最近被选中的(y)文本,即使您使用其他命令(例如x)删除某些文本,该文本也将保留。 "1是最近删除的文本,只要该文本不小(一行)即可。最后,正如Steve Vermeulen指出的那样,可以通过指定黑洞寄存器"-来告诉vim不要保存已删除的文本。

相关的帮助命令是"_

#3 楼

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

示例:


在正常模式下,包含文本“ Foo Bar”,键入"fyy将整行(yy)插入f寄存器("f)。
键入:let @f=',然后依次按Control + r,Control + r和f,然后将其粘贴到“ Foo Bar”,因此您的命令行现在将显示:let @f='Foo Bar,并且光标位于末尾。
现在您可以使用箭头和删除键来编辑您刚刚粘贴的内容,例如:let @f='foo bar baz
完成报价::let @f='foo bar baz'并按Enter。

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

(这也适用于


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

#4 楼

与@derobert提到的黑洞寄存器"_有关,您可以在http://vimcasts.org/episodes/meet-the-yank-register/


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


评论


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

–詹姆斯
2015年4月17日,下午3:21

我试图对原始帖子发表评论,但不能。我唯一的选择是我选择的@jamessan

–马龙·莱昂(MarlonLeón)
15年4月17日在18:05

#5 楼

插件ReplaceWithRegister

http://www.vim.org/scripts/script.php?script_id=2703(2009-2014)

它建议映射gr
/>

扬扬
直观地选择要替换的文本,然后按gr

移至要替换的下一个块

另外,也可以使用gr<text object>进行选择,而无需进行视觉选择。
当安装了Tim Pope的repeat.vim和Ingo Karkat的visualrepeat.vim插件时,将支持点重复。