繁体   English   中英

当文件中有折叠时,gvim自动显示折叠列

[英]gvim automatic show foldcolumn when there are folds in a file

我知道你可以用

set foldcolumn=1

启用折叠列

但有没有办法只在文件中存在折叠时自动打开它?

当文件变得足够大时,我的方法比@Zsolt Botykai更快。 对于小文件,我认为时差是无关紧要的。 该函数不是检查每一行的折叠,而只是尝试在折叠之间移动。 如果光标从不移动,则没有折叠。

function HasFolds()
    "Attempt to move between folds, checking line numbers to see if it worked.
    "If it did, there are folds.

    function! HasFoldsInner()
        let origline=line('.')  
        :norm zk
        if origline==line('.')
            :norm zj
            if origline==line('.')
                return 0
            else
                return 1
            endif
        else
            return 1
        endif
        return 0
    endfunction

    let l:winview=winsaveview() "save window and cursor position
    let foldsexist=HasFoldsInner()
    if foldsexist
        set foldcolumn=1
    else
        "Move to the end of the current fold and check again in case the
        "cursor was on the sole fold in the file when we checked
        if line('.')!=1
            :norm [z
            :norm k
        else
            :norm ]z
            :norm j
        endif
        let foldsexist=HasFoldsInner()
        if foldsexist
            set foldcolumn=1
        else
            set foldcolumn=0
        endif
    end
    call winrestview(l:winview) "restore window/cursor position
endfunction

au CursorHold,BufWinEnter ?* call HasFolds()

(无耻的自我插件

我创建了一个名为Auto Origami的插件,模仿@ SnoringFrog的答案

安装后将以下示例放入vimrc中以查看魔术发生(并阅读:help auto-origami以了解如何对其进行微调):

augroup autofoldcolumn
  au!

  " Or whatever autocmd-events you want
  au CursorHold,BufWinEnter * AutoOrigamiFoldColumn
augroup END

很可能你可以创建一个函数来检查文件是否有任何折叠,例如:

function HasFoldedLine() 
    let lnum=1 
    while lnum <= line("$") 
        if (foldclosed(lnum) > -1) 
            return 1 
        endif 
        let lnum+=1 
    endwhile 
    return 0 
 endfu 

现在您可以将它与一些autocommand一起使用,例如:

au CursorHold * if HasFoldedLine() == 1 | set fdc=1 | else |set fdc=0 | endif 

HTH

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM