Vim 防止在运动命令错误时打断贴图

Vim 防止在运动命令错误时打断贴图,vim,Vim,这个想法是要有一个地图,让我可以折叠用大括号括起来的代码块 nnoremap zff 0f{zf% 这与预期一样有效,但仅适用于开口支撑。 只要{和}在同一行上,下面的版本似乎就可以工作。尽管光标只跳到开口{且未创建折叠,但它们是否应位于不同的行上 nnoremap zff 0f{f}zf% 编辑: 问题似乎是,一旦其中一个运动命令出错,贴图就会中断。 :silent!防止ex命令在出现错误时破坏映射。运动命令是否有等效项?除非您的文件类型检测或语法问题阻止正确的对匹配,否则您的第一个映射应

这个想法是要有一个地图,让我可以折叠用大括号括起来的代码块

nnoremap zff 0f{zf%
这与预期一样有效,但仅适用于开口支撑。 只要{和}在同一行上,下面的版本似乎就可以工作。尽管光标只跳到开口{且未创建折叠,但它们是否应位于不同的行上

nnoremap zff 0f{f}zf%
编辑:

问题似乎是,一旦其中一个运动命令出错,贴图就会中断。
:silent!防止ex命令在出现错误时破坏映射。运动命令是否有等效项?

除非您的文件类型检测或语法问题阻止正确的对匹配,否则您的第一个映射应该可以工作

第二个映射无法工作,因为f和FtT仅在当前行上工作。备选方案:

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

那么…为什么要麻烦映射呢?

您的第一个映射应该可以工作,除非您的文件类型检测或语法问题妨碍了正确的对匹配

第二个映射无法工作,因为f和FtT仅在当前行上工作。备选方案:

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

那么…为什么还要麻烦映射呢?

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


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


你好@romainl,谢谢你的有用答案+1。不过,我出于好奇改进了我的问题。你好@romainl,谢谢你的有用答案+1。不过,我出于好奇改进了我的问题。
nnoremap zff :exe 'normal! 0f{' | exe 'normal! f}' | exe 'normal! zf%'