我如何删除一行而不把它放在我的默认缓冲区?
例子:
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的东西。
以下映射将产生:
D => "delete"
Leader d => "cut"
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的详细信息
还有另一种解决方案。包括复制
一行复制一行删除,就像这样。
将光标放在行开头进行复制,然后输入ddVp
Dd终止要复制的行
V选择要替换的整行
P粘贴灭线在视觉选择
现在被杀死的行在“1寄存器”中,而被复制的行
在“2寄存器”中。没有什么损失。
我使用vim 9,我不知道哪个旧版本的vim可以工作。如果这不起作用,你可以把这些行放在你的。vimrc中:
使p在可视模式下用“”寄存器替换所选文本。vnoremap p <Esc>:let current_reg = @"<CR>gvdi<C-R>=current_reg<CR><Esc>