Нахождение первой строки текущего фолда Vim - PullRequest
2 голосов
/ 23 января 2011

Я пишу функцию Vimscript, в которой мне нужно найти номер строки первой строки текущего сгиба. До сих пор я использовал это:

function! GetFoldStart()
    let l:current_line=line('.')
    normal [z
    let l:current_fold_start=line('.')
    execute 'normal ' . l:current_line . 'g'
endfunction

Который работает нормально, но кажется излишне дорогим. Есть ли более дешевый способ добиться этого? В основном мне нужно позаимствовать функциональность команды [z , фактически не переходя к строке.

Я надеялся, что переменная v: foldstart придет мне на помощь, но, похоже, она работает правильно только для закрытых складок (для использования в foldtext).

Заранее благодарим за мудрость Вим! Джонатан.

1 Ответ

1 голос
/ 23 января 2011

Во-первых, используйте normal! (с ударом) в скриптах, это безопаснее.Во-вторых,

let winview=winsaveview()
try
    " Your code here "
finally
    call winrestview(winview)
endtry

содержит больше дел, чем let l:current_line=line('.') ... execute "normal! ".l:current_line."gg".

Я не знаю способа получения необходимой информации без normal! [z, носледующий код не должен изменять список переходов:

function! GetFoldStart()
    let winview=winsaveview()
    try
        keepjumps normal! [z
        return line(".")
    finally
        keepjumps call winrestview(winview)
    endtry
endfunction
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...