如何删除(不削减)在Vim?

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

例:

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

我在做什么:

 yy dd p 

但是Vim用删除(cutted)的replace最近复制的string。 我知道我可以使用像"1yydd然后"1p缓冲区,但我总是忘记把复制的string放在一个缓冲区,然后我需要先粘贴我的内容(将被复制的行),然后删除我想要的(我想用前一行代替的行)。

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

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

使用“黑洞登记”, "_确实删除了一些东西: "_d "_ "_d
使用"_dP粘贴东西,并保持它可用于进一步粘贴。

对于第二个问题,你可以使用<Co>dw<Co>用于在离开插入模式时执行正常的命令。

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

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

黑洞登记册 "_将会诀窍,但有一个更好的解决办法:

当你用p命令input命令行时,你正在粘贴已被dd覆盖的(volatile) 默认寄存器 ""的内容。 但是你仍然可以从(非易失性的) 跳转寄存器 "0 粘贴 ,这不会被删除命令dd覆盖。

所以这些就是你想要使用的命令:

 yy dd "0p 

这是我不喜欢vim的事情之一…我结束了映射dd到我的.vimrc黑洞注册,生活一直很好,因为:

 nnoremap d "_d vnoremap d "_d 

你可以使用"_d来防止你的文本被覆盖,你可以在任何你想要的寄存器中存储被抽取或删除的文本" ,而_是“黑洞”寄存器,在那里你发送你不关心的东西。

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

下面的映射将会产生:

  • 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 

此外,将“领导者”键设置为逗号是一个不错的做法,例如:

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

这2个片段将使“d”成为你的新的命令。

如果您想使用这些映射与共享的系统剪贴板configuration,请参阅https://github.com/pazams/d-is-for-delete

 yy Vx p 

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