找到当前Vim折叠的第一行

时间:2011-01-23 19:54:38

标签: vim

我正在写一个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)。

提前感谢您的Vim智慧! 乔纳森。

1 个答案:

答案 0 :(得分:1)

首先,在脚本中使用normal!(with bang),它更安全。第二,

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