2014-10-08 53 views
0

我想保持折叠,因为它们处于插入模式。 http://vimdoc.sourceforge.net/htmldoc/usr_28.html reads:在插入模式下移动时不要打开折叠

在插入模式下,光标线处的折叠从不关闭。这允许你看到你输入的内容 !

这是非常烦人的,我不希望这样。我有理由关闭褶皱,并希望它们被关闭,直到我切换它们为止。

总之,我想通过za打开/关闭折叠,绝对没有别的。

http://vim.wikia.com/wiki/Keep_folds_closed_while_inserting_text不起作用。

我能得到的最接近的是这样的:

autocmd InsertEnter * setlocal foldclose=all 
autocmd InsertLeave,WinLeave * setlocal foldclose& 

这并不妨碍在插入模式打开折叠而关闭打开的折叠一旦它离开了。在此过程中,它在进入插入模式时关闭所有折叠。

作为一个奖励,如果在插入模式下插入字符时,最好打开折叠。

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

回答

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 
3

插入模式不适用于移动光标,它用于输入/替换文本! (有些缺失与<BS><C-W>是好的,但你应该更喜欢这里的更强大的d...正常模式下的命令。)

如果你坚持VI/Vim的编辑的这条黄金法则(只停留在插入模式短期编辑爆发,使用正常模式的其他一切),你不会为这种看似不良的行为而烦恼!

+0

是的,我怀疑这将是即时答案。无论如何,谢谢,但我仍然想实现上述行为。 – 2014-10-08 09:37:13

相关问题