2011-01-23 2 views
2

J'écris une fonction Vimscript dans laquelle je dois trouver le numéro de ligne de la première ligne du pli actuel. Jusqu'ici j'ai utilisé ceci:Recherche de la première ligne du pli Vim actuel

Qui fonctionne bien, mais semble inutilement cher. Y a-t-il un moyen moins coûteux de l'atteindre? Fondamentalement, je dois emprunter la fonctionnalité de la commande [z, sans réellement passer à la ligne. J'espérais que la variable v: foldstart viendrait à mon secours, mais elle ne semble fonctionner correctement que pour les replis fermés (pour une utilisation en foldtext).

Merci d'avance pour votre sagesse Vim! Jonathan.

Répondre

1

D'abord, utilisez normal! (avec bang) dans les scripts, c'est plus sûr. En second lieu,

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

détient plus de cas ... alors let l:current_line=line('.')execute "normal! ".l:current_line."gg".

Je ne sais pas un moyen d'obtenir de l'information que vous voulez sans normal! [z, mais le code suivant ne doit pas modifier Jumplist:

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

Merci, c'est très bons conseils (je suis de longue date utilisateur Vim, mais un Vim-scripteur au visage frais). J'espère toujours qu'il existe une solution alternative. –

Questions connexes