gpt4 book ai didi

Vim,如何自动删除空行到“_?

转载 作者:行者123 更新时间:2023-12-02 17:49:06 27 4
gpt4 key购买 nike

当我们使用 *N*ddd*motion*< 删除空行时,如何让 Vim 始终删除 "_ 的内容?

编辑1:

例如,我在某处写了"Hello",然后用yy 拉了它。然后我将光标移动到其他地方,通过 N+dd 删除一些空行到“_ 没有明确指示寄存器 ”_。 ,然后,我可以使用 p 粘贴 “Hello”

编辑2:

我们能否通过让 vim 检查已删除的内容并相应地编辑寄存器来实现这一点?(我想根据要删除的内容修改 N+dd 的行为。)

(虽然将 leader-key d 映射到 "_d 效果很好,但是当我以这种方式工作时,我仍然必须告诉自己:“嘿,你正在删除空行,你应该使用特殊键"。)

最佳答案

这是一个有趣的想法。基本上,您希望有一个“聪明”的删除。这意味着您需要定义一个新的运算符。

Vim 帮助中描述了如何定义一个新的运算符 :h :map-operator .

巧妙删除的代码将包括如下内容:

nnoremap <silent> d :<C-U>set opfunc=CleverDelete<CR>g@
function! CleverDelete(type)
let reg_save = @@
if a:type ==# 'line'
normal! '[V']ygv
if @@ =~ '\%^\_s*\%$'
normal! "_d
let @@ = reg_save
else
normal! d
endif
elseif a:type ==# 'char'
" ...
" TODO
else
" TODO
endif
endfunction

这适用于按行删除:dj 变成 "_dj 如果它只删除空格。

现在您需要实现按字符删除、可视模式映射、v:count 处理、按行映射 dd 等。这只是一个开始。

关于Vim,如何自动删除空行到“_?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723299/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com