我的Ruby折叠表达式导致自动完成(<C-n>
/ <C-p>
)显着减速,这是一个巨大的痛苦。当我切换到手动折叠时,自动完成变为即时。
为了解决这个问题,我希望折叠是“按需”,即它只在我zx
或zX
时计算折叠。计划:
manual
zx
以将折叠方法切换为expr
并运行zx
,然后将折叠方法切换回manual
zX
问题是,当我覆盖zx
时,如何调用“旧”zx
?
肯特的完美答案,这是我的最终工作解决方案(ftplugin/ruby.vim
):
if &filetype == 'ruby'
setlocal foldmethod=manual
nn <buffer> <silent> zx :set foldmethod=expr<CR>:norm! zx<CR>:set foldmethod=manual<CR>
nn <buffer> <silent> zX :set foldmethod=expr<CR>:norm! zX<CR>:set foldmethod=manual<CR>
end
答案 0 :(得分:3)
使用:noremap
系列命令而不是普通:map
,可以防止任何映射以递归方式触发。因此,您可以直接使用zx安全地调用映射中的“旧”zx。案例:
nnoremap <buffer> <silent> zx :set foldmethod=expr<CR>zx:set foldmethod=manual<CR>
答案 1 :(得分:2)
使用:normal
命令,可以执行NORMAL模式命令。如果您添加了!
,则会绕过映射。对于你的例子,
:norm! zx
可能会有所帮助。