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

问题描述 投票:0回答:10

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

示例:

line that will be copied.

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

我正在尝试做的事情:

yy
dd
p

但是 Vim 会用删除(剪切)的字符串替换最近复制的字符串。我知道我可以使用像

"1yy
dd
然后
"1p
这样的缓冲区,但我总是忘记将复制的字符串放入缓冲区中,然后我需要先粘贴我的内容(将复制的行),然后删除我想要的内容(我想用前一行替换的行。)

如何在 Vi(m) 中真正删除文本而不复制它?

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

vim copy-paste
10个回答
274
投票

黑洞寄存器

"_
可以解决这个问题,但有一个更好的解决方案:

当您使用

p
命令回车时,您将粘贴(易失性)默认寄存器
""
的内容,该内容已被
dd
覆盖。但您仍然可以从(非易失性)yank 寄存器
"0
粘贴,它不会被删除命令
dd
覆盖。

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

yy
dd
"0p

202
投票

使用“黑洞寄存器”,

"_
真正删除某些内容:
"_d

使用
"_dP
粘贴某些内容并使其可用于进一步粘贴。

对于第二个问题,您可以使用

<C-o>dw
<C-o>
用于在不离开 insert 模式的情况下执行普通命令。

当然,您可以设置自己的映射以节省打字时间。我有这些:

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

70
投票

这是我不喜欢 vim 的事情之一...我最终将

dd
映射到我的 .vimrc 中的黑洞寄存器,从此以后生活一直很好:

nnoremap d "_d
vnoremap d "_d

41
投票

将产生以下映射:

  • d =>“删除”
  • 领导者 d => “切”
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 = ","

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

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


10
投票

您可以使用

"_d
来防止内容覆盖您拉出的文本。您可以使用
"
将拉出或删除的文本存储在您想要的任何寄存器中,而
_
是“黑洞”寄存器,您可以在其中发送您不关心的内容。

欲了解更多信息,您可以输入

:help "_
:help deleting


1
投票

我在 .vimrc 中使用

noremap ' "_

这保留了

dd
的行为,所以我可以像以前一样用它来剪切。

但是当我真的想删除某些内容时,只需使用前缀

'
即可。例如:
'dd
'dw


0
投票
yy
Vx
p

在可视模式下,

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


0
投票

我最终得到了

nnoremap p "0p
nnoremap P "0P
vnoremap p "0p
vnoremap P "0P
vnoremap x "0x
nnoremap x "0x

始终从 0 寄存器粘贴,而不是从未命名的寄存器粘贴。在可视模式下使用

x
删除到0寄存器。


0
投票

还有另一种解决方案。这包括复制

line to copy
超过
line to delete
,就像这样。

将光标置于

line to copy
行首,然后输入
ddVp

  • dd
    杀掉要复制的行
  • V
    选择要替换为的整行
  • p
    将删除的线粘贴到视觉选择上

现在被杀死的行位于

"1
寄存器中,并且复制的行 位于
"2
寄存器中。没有任何损失。

我使用 vim 9,我不知道哪个旧的 vim 版本适用。如果这不起作用,您可以将这些行放入您的

.vimrc
:

" Make p in Visual mode replace the selected text with the "" register. vnoremap p <Esc>:let current_reg = @"<CR>gvdi<C-R>=current_reg<CR><Esc>


0
投票

经典方式

最有可能是最糟糕的答案,但到目前为止它对我有用

   ‎ ‎ ‎ 

u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e

u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e

© www.soinside.com 2019 - 2024. All rights reserved.