如何删除一行而不将其放入默认缓冲区?
示例:
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 的东西。
黑洞寄存器
"_
可以解决这个问题,但有一个更好的解决方案:
当您使用
p
命令回车时,您将粘贴(易失性)默认寄存器 ""
的内容,该内容已被 dd
覆盖。但您仍然可以从(非易失性)yank 寄存器 "0
粘贴,它不会被删除命令dd
覆盖。
因此,这些是您要根据示例使用的命令:
yy
dd
"0p
使用“黑洞寄存器”,
"_
真正删除某些内容:"_d
。"_dP
粘贴某些内容并使其可用于进一步粘贴。
对于第二个问题,您可以使用
<C-o>dw
。 <C-o>
用于在不离开 insert 模式的情况下执行普通命令。
当然,您可以设置自己的映射以节省打字时间。我有这些:
nnoremap <leader>d "_d
xnoremap <leader>d "_d
xnoremap <leader>p "_dP
这是我不喜欢 vim 的事情之一...我最终将
dd
映射到我的 .vimrc 中的黑洞寄存器,从此以后生活一直很好:
nnoremap d "_d
vnoremap 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
您可以使用
"_d
来防止内容覆盖您拉出的文本。您可以使用 "
将拉出或删除的文本存储在您想要的任何寄存器中,而 _
是“黑洞”寄存器,您可以在其中发送您不关心的内容。
欲了解更多信息,您可以输入
:help "_
或 :help deleting
我在 .vimrc 中使用
noremap ' "_
这保留了
dd
的行为,所以我可以像以前一样用它来剪切。
但是当我真的想删除某些内容时,只需使用前缀
'
即可。例如:'dd
、'dw
yy
Vx
p
在可视模式下,
x
会删除所选内容,因此如果要删除整行,请先按V
在可视模式下选择该行,然后按x
删除所选内容。
我最终得到了
nnoremap p "0p
nnoremap P "0P
vnoremap p "0p
vnoremap P "0P
vnoremap x "0x
nnoremap x "0x
始终从 0 寄存器粘贴,而不是从未命名的寄存器粘贴。在可视模式下使用
x
删除到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>
经典方式
最有可能是最糟糕的答案,但到目前为止它对我有用
u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e
u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e u200e