我真的很喜欢zx
Vim 中的组合键(它可以折叠除文本活动区域之外的所有内容)。然而,这似乎是一个相当危险的组合键。按下x
折叠删除折叠。因此,如果z
被省略,或者被前面的某个其他组合键捕获,则很容易通过x
自行按下来意外删除折叠中的文本。
鉴于它dd
也可用于删除折叠中的文本,如果我可以禁用x
折叠删除工具会很好。
- 如何
x
禁用折叠删除键?
您x
只能使用以下简单<expr>
映射禁用折叠:
nnoremap <expr> x ((foldclosed('.')==-1)?('x'):('zx'))
与@Eelvex 函数不同,它保留了所有x
功能,并且还将x
在折叠上运行时重新映射到zx
.
x
您可以通过以下方式完全禁用x
(或任何其他键/组合):
nmap x <nop>
(x
顺便说一句,与dl
not相同dd
)
使用运算符时,始终将闭合折叠作为一个整体包含在内,因此(afaik)不可能x
仅禁用折叠删除。
一种可能的解决方法是在您“打开”折叠时自动打开折叠,因此x
只会删除一个字符(正常):
set foldopen=all
但这使得浏览代码变得更加麻烦。
x
如果您不介意禁用某些x
功能(例如删除到寄存器),这也可以完成这项工作:
function Foldx()
if foldclosed(".") == line(".")
echo "Watch it!"
else
call feedkeys("dl")
echo "x"
endif
endfunction
nmap x :call Foldx()<cr>