如何在Vim中删除(不剪切)?


144

如何删除一行而不将其放入默认缓冲区?

例:

line that will be copied.

line that I want to be substitued with the previous one.

我正在尝试做的是:

yy
dd
p

但是Vim用删除(剪切)的字符串替换最近复制的字符串。我知道,我可以使用缓冲区像,"1yydd然后"1p,但我总是忘了把复制的字符串中的一个缓冲区,然后我需要先贴上我的内容(将要复制的行),然后删除我想要的(行,我想替换为上一个。)

我如何才能真正删除Vi(m)中的文本而不进行复制?

另一个相关的问题是如何在插入模式下转发删除单词?我想要类似Ctrl+的东西w


Answers:


128

使用“黑洞寄存器” "_真正删除某些内容:"_d
使用"_dP粘贴的东西,把它用于进一步的粘贴。

对于第二个问题,您可以使用<C-o>dw<C-o>用于执行普通命令而无需退出插入模式。

当然,您可以设置自己的映射来保存键入。我有这些:

nnoremap <leader>d "_d
xnoremap <leader>d "_d
xnoremap <leader>p "_dP

谢谢,您回答了我两个问题。但是我不明白这些noremap命令将如何帮助我。我是否失去了剪切功能,对吗?
MaikoID

3
不,d仍然“剪切”并p仍然“粘贴”,而<leader>d实际删除并<leader>p丢弃所选文本并粘贴默认寄存器的内容。<leader>p允许我多次粘贴相同的文本,而不必使用命名寄存器。
romainl 2012年

119

黑洞寄存器 "_会做的伎俩,但有一个更好的解决方案:

当使用p命令返回行时,您将粘贴(易失性)默认寄存器 的内容,该寄存器""已被覆盖dd。但是您仍然可以从(非易失性)yank寄存器粘贴 "0,不会被delete命令覆盖dd

因此,根据您的示例,这些是您要使用的命令:

yy
dd
"0p

1
太好了,这应该是公认的答案。每当我要粘贴时手动指定一个寄存器要比每次删除任何内容时始终指定一个寄存器要容易得多。
JShorthouse

43

那是我不喜欢vim的一件事...我最终映射dd到了我的.vimrc中的黑洞寄存器,从那以后生活一直很美好:

nnoremap d "_d
vnoremap d "_d

6
那你怎么剪呢?
VitalyB

11
v/Vx也切。并且在任何操作系统中,xwith 切割也是一致的Ctrl + x
WesternGun

22

以下映射将产生:

  • d =>“删除”
  • 领导者d =>“ cut”
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d

nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d

另外,将“ leader”键设置为逗号也是一种不错的做法,例如:

let mapleader = ","
let g:mapleader = ","

这两个片段将使“,d”成为您的新剪切命令。

如果您想将这些映射与共享的系统剪贴板配置一起使用,请参见https://github.com/pazams/d-is-for-delete的更多详细信息。


我希望我可以不止一次地投票赞成这个答案-我使用的是kprobst的答案,但是为了划清界限,我不得不使用yydd手指上不可持续的方式;-)
塔希尔·哈桑

1
intellij的想法在此之后表现得如此怪异。dd什么也不做。,d什么也不做
s1n7ax

我非常喜欢这种解决方案。对我不有用的一件事-是用,dd。添加nnoremap <leader>dd ""dd后开始工作
Alexey

8

您可以"_d用来防止内容覆盖被选中的文本。您可以使用",在任何想要的寄存器中存储被删除或删除的文本,这_就是“黑洞”寄存器,您可以在其中发送不需要的内容。

有关更多信息,您可以输入:help "_:help deleting


-1
yy
Vx
p

在可视模式下,x将删除所选内容,因此,如果要删除整行,请先V在可视模式下按选择该行,然后按x删除选择。


2
这会将删除的行复制到剪贴板,这正是OP想要避免的。
aVeryStableGenius

谢谢!不知怎的,这完美的作品上的Emacs的邪恶插件
佩德罗·宾纳
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.