如何删除一行而不将其放入我的默认缓冲区?
示例:
line that will be copied.
line that I want to be substitued with the previous one.
我正在尝试做什么:
yy
dd
p
但是Vim用删除的(cutted)替换最近复制的字符串。我知道我可以使用缓冲区,如"1yy
,dd
然后"1p
,但我总是忘记将复制的字符串放在缓冲区中然后我需要先粘贴我的内容(行将被复制)然后删除我想要的东西(我希望用前一个代替的那一行。)
如何在不复制的情况下真正删除Vi(m)中的文本?
另一个相关问题是如何在插入模式下转发删除单词?我想要类似 Ctrl + w 的东西。
答案 0 :(得分:97)
使用“黑洞注册”"_
来真正删除某些内容:"_d
使用"_dP
粘贴某些内容并使其可用于进一步粘贴。
对于第二个问题,您可以使用<C-o>dw
。 <C-o>
用于执行正常命令,而不执行 insert 模式。
当然,您可以设置自己的映射以节省输入。我有这些:
nnoremap <leader>d "_d
xnoremap <leader>d "_d
xnoremap <leader>p "_dP
答案 1 :(得分:72)
黑洞注册 "_
可以解决问题,但有一个更好的解决方案:
当您使用p
命令输入行时,您将粘贴(volatile)默认寄存器 ""
的内容,该内容已被{{1}覆盖}}。但您仍然可以从(非易失性) yank注册 dd
粘贴,这不会被删除命令"0
覆盖。
因此,根据您的示例,这些是您要使用的命令:
dd
答案 2 :(得分:26)
这是我不喜欢vim的事情之一...我最终将dd
映射到我的.vimrc中的黑洞寄存器,生活一直很好:
nnoremap d "_d
vnoremap d "_d
答案 3 :(得分:13)
以下映射将产生:
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d
nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d
此外,拥有&#34;领导者&#34;这是一个很好的做法。键设置为逗号, e.g:
let mapleader = ","
let g:mapleader = ","
这2个片段将使#34;,d&#34;是你的新切割命令。
如果您希望将这些映射与共享系统剪贴板配置一起使用,请参阅https://github.com/pazams/d-is-for-delete
中的更多详细信息。答案 4 :(得分:6)
您可以使用"_d
来阻止事件覆盖您的笨拙文本。您可以使用"
在任何注册表中存储已取消或已删除的文本,_
是“黑洞”注册表,您可以在其中发送您不关心的内容。
有关详情,您可以输入:help "_
或:help deleting
答案 5 :(得分:0)
yy
Vx
p
在可视模式下,x
会删除所选内容,因此如果您要删除整行,请先按V
以可视模式选择该行,然后按x
删除选择。
答案 6 :(得分:0)
我在我的 .vimrc 中使用 noremap ' "_
这保持了 dd
的行为,所以我可以像以前一样用它来切割。
但是当我真的想删除某些东西时,只需使用前缀 '
。例如:'dd
,'dw