gvim автоматическое отображение сворачивания столбцов при наличии сгибов в файле - PullRequest
6 голосов
/ 06 января 2012

Я знаю, что вы можете использовать

set foldcolumn=1

, чтобы включить столбец сгиба

, но есть ли способ его автоматического включения, только если в файле есть сгибы?

Ответы [ 3 ]

6 голосов
/ 16 марта 2015

Мой метод быстрее, чем у @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()
1 голос
/ 27 августа 2017

(Бесстыдная личность плагин )

Я создал для этого плагин под названием Авто Оригами , по образцу @ 1007 * ответа SnoringFrog .

Добавьте следующий пример в vimrc после его установки, чтобы увидеть, как происходит волшебство (и прочитайте :help auto-origami, чтобы узнать, как его настроить):

augroup autofoldcolumn
  au!

  " Or whatever autocmd-events you want
  au CursorHold,BufWinEnter * AutoOrigamiFoldColumn
augroup END
1 голос
/ 06 января 2012

Скорее всего, вы можете создать функцию для проверки наличия в файле сгибов, например:

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 

НТН

...