如何在Vim中删除(不删除)?

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)

  • 不,`d`仍然“剪切”,`p`仍然“粘贴”,而&lt;&lt; leader&gt; d`为实删除,而&lt;&lt; leader&gt; p`则丢弃所选文本并粘贴默认寄存器的内容。`&lt;leader&gt; p`允许我多次粘贴相同的文本,而不必使用命名寄存器。 (2认同)

cut*_*ine 86

黑洞寄存器 "_会做的伎俩,但有一个更好的解决方案:

当您使用p命令输入行时,您将粘贴已被覆盖的(易失性)默认寄存器 的内容.但您仍然可以从(非易失性)yank寄存器中粘贴,该命令不会被delete命令覆盖.""dd "0dd

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

yy
dd
"0p
Run Code Online (Sandbox Code Playgroud)

  • `"0p` 并不完全是从指尖滚下来的,但我想我可以习惯这个! (11认同)
  • 太好了,这应该是公认的答案。每当我想粘贴时手动指定寄存器比每次删除任何内容时都指定寄存器要容易得多。 (4认同)
  • @Jonz 我会像这样在视觉上记住它。https://imgur.com/sQ2k0NI (3认同)

kpr*_*bst 35

这是我不喜欢vim的事情之一...我最终映射dd到我的.vimrc中的黑洞寄存器,生活一直很好:

nnoremap d "_d
vnoremap d "_d
Run Code Online (Sandbox Code Playgroud)

  • 那你怎么削减? (6认同)
  • 带有"x"的`v/V`也被切断.在任何操作系统中,使用`x`进行切割也与`Ctrl + x`一致. (6认同)

paz*_*ams 17

以下映射将产生:

  • 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
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上的更多详细信息.

  • intellij idea 在此之后表现得很奇怪。dd 什么也不做。,d 不执行任何操作 (3认同)
  • 我希望我能不止一次支持这个答案——我使用的是 kprobst 的答案,但是为了剪断一条线,我不得不使用 `yydd`,这在我的手指上有点不可持续`;-)`。 (2认同)
  • 我非常喜欢这个解决方案。对我来说不起作用的一件事是用 `,dd` 剪线。添加 `nnoremap &lt;leader&gt;dd ""dd` 后它开始工作 (2认同)

Ale*_*lex 7

您可以使用它"_d来防止事物覆盖被拉动的文本.您可以将抽屉或删除的文本存储在您想要的任何寄存器中",并且_是"黑洞"寄存器,您可以在其中发送您不关心的内容.

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