2014-10-08 85 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

相關問題