【问题标题】:Do not open folds when moved over in insert mode在插入模式下移动时不要打开折叠
【发布时间】:2014-10-08 09:02:40
【问题描述】:

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

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

作为奖励,如果一个字符实际上是以插入模式插入的,那么打开折叠会很好。

注意:我知道“您不应该在插入模式下四处走动”。如果可能的话,我只想要上述行为。谢谢。

【问题讨论】:

    标签: vim


    【解决方案1】:

    插入模式不是移动光标,而是输入/替换文本! (使用<BS><C-W> 进行一些删除是可以的,但您应该更喜欢这里更强大的d... 普通模式命令。)

    如果你坚持这个 vi / Vim 编辑的黄金法则(只在插入模式下进行短暂的编辑,其他的都使用普通模式),你就不会被这个看似不良行为!

    【讨论】:

    • 是的,我怀疑这将是即时的答案。无论如何,谢谢,但我仍然想实现上述行为。
    【解决方案2】:

    我发现在插入模式下简单地跳过折叠是一个足够好的解决方案。以下对我有用:

    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
    

    【讨论】:

      猜你喜欢
      • 2019-09-02
      • 2019-04-13
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多