防止地图破坏运动命令错误

时间:2014-11-05 10:04:48

标签: vim

我的想法是拥有一个允许我折叠用大括号括起来的代码块的地图。

nnoremap zff 0f{zf%

这可以按预期工作,但仅限于左大括号。 只要{和}在同一行,以下版本似乎就可以工作。它们应该在不同的行上,尽管光标只跳到开口{并且没有创建折叠。

nnoremap zff 0f{f}zf%

编辑:

问题似乎是,一旦其中一个动作命令出现错误,地图就会中断。 :silent!可防止ex命令在发生错误时破坏映射。是否有运动命令的等价物?

2 个答案:

答案 0 :(得分:3)

您的第一个映射应该有效,除非您有文件类型检测或语法问题阻止正确的配对匹配。

您的第二个映射无法运行,因为f(和FtT)仅适用于当前行。备选方案:

f{v/}<CR>zf
f{zf/}<CR>

但您可以将zf用于文本对象:

zfi{
zfat
zfip

所以...为什么要打扰映射?

答案 1 :(得分:1)

你是对的,命令序列中的错误会破坏序列,这通常是正确的。如果您想在错误的情况下继续,只需通过:normal!单独执行命令。这可以通过:execute

链接在一个命令行中
nnoremap zff :exe 'normal! 0f{' | exe 'normal! f}' | exe 'normal! zf%'