我正在写一个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智慧! 乔纳森。
答案 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