在插入模式下移动时不要打开折叠

时间:2014-10-08 09:02:41

标签: vim

我想保持折叠,因为它们处于插入模式。 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&

它不会阻止折叠在插入模式下打开,但在它打开后会关闭打开的折叠。在此过程中,它会在进入插入模式时关闭所有折叠。

作为奖励,如果在插入模式下实际插入了一个字符,那么打开折叠会很不错。

注意:我知道"你不应该在插入模式中移动"。如果可能,我只想要上述行为。感谢。

2 个答案:

答案 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
相关问题