2011-01-23 4 views
2

현재 접기의 첫 번째 줄의 줄 번호를 찾아야하는 Vimscript 함수를 작성하고 있습니다. 지금까지 나는 이것을 사용 해왔다 :현재 Vim 접기의 첫 번째 줄 찾기

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

먼저 스크립트에 normal! (강타 포함)을 사용하면 더 안전합니다. 둘째,

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

execute "normal! ".l:current_line."gg"은 ... 다음 let l:current_line=line('.') 더 사례를 보유하고 있습니다.

난 당신이 normal! [z없이 원하는 정보를 얻을 수있는 방법을 모르지만, 다음 코드는 JumpList에 수정해서는 안 :

function! GetFoldStart() 
    let winview=winsaveview() 
    try 
     keepjumps normal! [z 
     return line(".") 
    finally 
     keepjumps call winrestview(winview) 
    endtry 
endfunction 
+0

감사합니다, 그것은 아주 좋은 충고 (나는 오랜 빔 사용자,하지만 신선한 얼굴을 가진 Vim-scripter). 그래도 대체 솔루션이 있기를 바라고 있습니다. –

관련 문제