如何删除一行而不将其放入我的默认缓冲区?
例子:
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 register "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
d
仍然“剪切”,而 p
仍然“粘贴”,而 <leader>d
删除真正的内容,而 <leader>p
丢弃选定的文本并粘贴默认寄存器的内容。 <leader>p
允许我多次粘贴相同的文本,而无需使用命名寄存器。
nnoremap <leader>d "_dd
和xnoremap <leader>d "_dd
吗?就像现在一样,它等待下一个序列。
<leader>d
映射的重点不是替代 dd
,而是替代 d
,后者等待动作。
<C-o>
感到陌生。拉德!
这是我不喜欢 vim 的地方之一......我最终将 dd
映射到我的 .vimrc 中的黑洞寄存器,并且生活一直很好:
nnoremap d "_d
vnoremap d "_d
v/V
和 x
也被剪切。在任何操作系统中,使用 x
进行切割也与 Ctrl + x
一致。
以下映射将产生:
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 = ","
这两个片段将使“,d”成为您的新剪切命令。
如果您想将这些映射与共享系统剪贴板配置一起使用,请参阅 https://github.com/pazams/d-is-for-delete 中的更多详细信息
yydd
,这在我的手指 ;-)
上有点不可持续。
,dd
切割线。添加 nnoremap <leader>dd ""dd
后它开始工作
您可以使用 "_d
来防止内容覆盖您抽出的文本。您可以使用 "
将删除或删除的文本存储在您想要的任何寄存器中,而 _
是“黑洞”寄存器,您可以在其中发送您不关心的内容。
如需更多信息,您可以输入 :help "_
或 :help deleting
我在我的 .vimrc 中使用 noremap ' "_
这保留了 dd
的行为,因此我可以像以前一样使用它进行剪切。
但是当我真的想删除某些东西时,只需使用前缀 '
。例如:'dd
、'dw
我结束了
nnoremap p "0p
nnoremap P "0P
vnoremap p "0p
vnoremap P "0P
vnoremap x "0x
nnoremap x "0x
始终从 0 寄存器而不是未命名的寄存器粘贴。在可视模式下使用 x
删除到 0 寄存器。
yy
Vx
p
在可视模式下,x
将删除所选内容,因此如果要删除整行,请先按 V
在可视模式下选择该行,然后按 x
删除所选内容。
不定期副业成功案例分享
"0p
并没有完全从指尖滚落,但我想我可以习惯这一点!