我想保持折叠,因为它们处于插入模式。 http://vimdoc.sourceforge.net/htmldoc/usr_28.html读到:
在插入模式下,光标线处的折叠永远不会关闭。这允许 你看看你输入的是什么!
这非常烦人,我不想要这个。我有理由关闭折叠,并希望它们关闭,直到我za
切换它们。
简而言之,我希望折叠由za
打开/关闭,绝对没有别的。
http://vim.wikia.com/wiki/Keep_folds_closed_while_inserting_text不起作用。
我能得到的最接近的是:
autocmd InsertEnter * setlocal foldclose=all
autocmd InsertLeave,WinLeave * setlocal foldclose&
它不会阻止折叠在插入模式下打开,但在它打开后会关闭打开的折叠。在此过程中,它会在进入插入模式时关闭所有折叠。
作为奖励,如果在插入模式下实际插入了一个字符,那么打开折叠会很不错。
注意:我知道"你不应该在插入模式中移动"。如果可能,我只想要上述行为。感谢。
答案 0 :(得分:3)
插入模式不是用于移动光标,而是用于输入/替换文本! (对<BS>
或<C-W>
进行一些删除是可以的,但您应该更喜欢这里更强大的d...
普通模式命令。)
如果你坚持vi / Vim编辑这个黄金法则(只停留在插入模式下进行短暂的编辑突发,使用普通模式进行其他一切),你不会被这看似烦恼不好的行为!
答案 1 :(得分:1)
我发现在插入模式下简单地跳过折叠是一个很好的解决方案。以下对我有用:
function! JumpOverFold(up)
if a:up
let foldn = foldclosed('.')
if foldn == 1 "Fold begins at first line, can't jump over, go back
exec 'normal gj'
elseif foldn > 0
exec 'normal gk'
end
else
let foldn = foldclosedend('.')
if foldn == line('$') "Fold ends at last line, can't jump over, go back
exec 'normal gk'
elseif foldn > 0
exec 'normal gj'
end
end
endfunction
inoremap <UP> <ESC>gk:call JumpOverFold(1)<CR>i
inoremap <DOWN> <ESC>gj:call JumpOverFold(0)<CR>i