Mai*_*oID 114 vim copy-paste
如何在不将其放入默认缓冲区的情况下删除一行?
例:
line that will be copied.
line that I want to be substitued with the previous one.
Run Code Online (Sandbox Code Playgroud)
我正在做的事情:
yy
dd
p
Run Code Online (Sandbox Code Playgroud)
但是Vim用删除的(cutted)替换了最近复制的字符串.我知道,我可以使用缓冲区像,"1yy,dd然后"1p,但我总是忘了把复制的字符串中的一个缓冲区,然后我需要先贴上我的内容(将要复制的行),然后删除了我想要的(行,我想用前一个替代.)
如何在不复制的情况下真正删除Vi(m)中的文本?
另一个相关问题是如何在插入模式下转发删除单词?我想要类似Ctrl+的东西w.
rom*_*inl 106
使用"黑洞寄存器","_真正删除一些东西:"_d.
使用"_dP粘贴的东西,把它用于进一步的粘贴.
对于第二个问题,你可以使用<C-o>dw.<C-o>用于执行退出插入模式的正常命令.
当然,您可以设置自己的映射以节省输入.我有这些:
nnoremap <leader>d "_d
xnoremap <leader>d "_d
xnoremap <leader>p "_dP
Run Code Online (Sandbox Code Playgroud)
cut*_*ine 86
该黑洞寄存器 "_会做的伎俩,但有一个更好的解决方案:
当您使用p命令输入行时,您将粘贴已被覆盖的(易失性)默认寄存器 的内容.但您仍然可以从(非易失性)yank寄存器中粘贴,该命令不会被delete命令覆盖.""dd "0dd
因此,根据您的示例,这些是您要使用的命令:
yy
dd
"0p
Run Code Online (Sandbox Code Playgroud)
kpr*_*bst 35
这是我不喜欢vim的事情之一...我最终映射dd到我的.vimrc中的黑洞寄存器,生活一直很好:
nnoremap d "_d
vnoremap d "_d
Run Code Online (Sandbox Code Playgroud)
paz*_*ams 17
以下映射将产生:
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d
nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d
Run Code Online (Sandbox Code Playgroud)
此外,将"leader"键设置为逗号是一种很好的做法,例如:
let mapleader = ","
let g:mapleader = ","
Run Code Online (Sandbox Code Playgroud)
这2个片段将使",d"成为你的新剪辑命令.
如果您希望将这些映射与共享系统剪贴板配置一起使用,请参阅https://github.com/pazams/d-is-for-delete上的更多详细信息.
您可以使用它"_d来防止事物覆盖被拉动的文本.您可以将抽屉或删除的文本存储在您想要的任何寄存器中",并且_是"黑洞"寄存器,您可以在其中发送您不关心的内容.
有关更多信息,您可以键入:help "_或:help deleting