2010-12-06 4 views
0

code suivant a été repris de this blogvim codewalk par

function! Privatize() 
    let priorMethod = PriorMethodDefinition() 
    exec "normal iprivate :" . priorMethod . "\<Esc>==" 
endfunction 

function! PriorMethodDefinition() 
    let lineNumber = search('def', 'bn') 
    let line  = getline(lineNumber) 
    if line == 0 
    echo "No prior method definition found" 
    endif 
    return matchlist(line, 'def \(\w\+\).*')[1] 
endfunction 

map <Leader>p :call Privatize()<CR> 

J'ai essayé, mais je ne comprends pas la méthode PriorMethodDefinition. Quelqu'un peut-il me guider à travers ce code?

Répondre

1

PriorMethodDefinition Renvoie le nom de la première définition de méthode au-dessus du curseur.

Il le fait par search en reculant pour une ligne contenant le texte 'def'. La fonction de recherche renvoie le numéro de ligne et getline est utilisé pour récupérer le contenu de cette ligne.

La fonction vérifie qu'elle a trouvé une ligne valide, avant d'utiliser une expression régulière pour obtenir le nom de la méthode et la renvoyer.

Vous pouvez en savoir plus sur ces fonctions si vous êtes curieux de savoir les détails - voir:

:help search 
:help getline 
:help matchlist 

Modifier: vous pouvez également lire sur le modèle d'expression régulière

:help pattern 

Mais Je l'ai trouvé un peu confus au début, alors permettez-moi de l'expliquer un peu. Voici l'expression utilisée:

'def \(\w\+\).*' 

Cela recherchera tout texte correspondant au modèle suivant: « le texte def suivi d'un ou plusieurs « mot » caractères \w\+ suivi par un ou plusieurs caractères .* ». La partie correspondant au mot caractères est placée dans un groupe (ou atome), désigné par les parenthèses échappées \( & \). Plus d'informations sur les définitions de caractères de mot, etc. peuvent être trouvées dans le lien d'aide ci-dessus.

La fonction matchlist renvoie une liste de correspondances, la première [0] correspondant au texte intégral correspondant à la regex, suivie de sous-requêtes (notre groupe). Nous sommes intéressés par le premier tel submatch, d'où le [1].

+0

génial. Votre réponse m'a donné quelques conseils pour commencer à lire le livre vim. Merci. –

+0

L'aide intégrée est excellente, mais vous devez apprendre ce qu'il faut rechercher et comment cela fonctionne. Je commence souvent à chercher dans les pages d'aide, à recourir à une recherche google si cela ne fonctionne pas, puis à revenir aux pages d'aide pour obtenir des informations plus détaillées une fois que je sais ce que je recherche. –