Comment utiliser une variable dans l'expression d'une commande «normale»?

13

Comment peut-on utiliser une variable lors de l'exécution de quelque chose via normal!dans vimscript?

Exemple:

function! MyFunction(someArg)
   normal! (a:someArg)l
endfunction

Cela devrait déplacer les someArgpas du curseur vers la droite.

statox
la source
4
vous devez utiliserexe "norm!" variable
Christian Brabandt

Réponses:

21

La executefonction prend une chaîne comme argument, elle développe la chaîne et l'exécute avec une commande ex régulière. Ainsi vous pouvez faire:

function! MyFunction(someArg) 
    execute "normal! ". a:someArg. "l" 
endfunction

Le .est un opérateur standard vimscript à cordes concaténer.

executepeut être raccourci exe.

Voir :h :execute


EDIT J'ajouterai un point sur le commentaire de @Christian Brabandt sur la concaténation avec a ..

Le doc dit:

Plusieurs arguments sont concaténés, avec un espace entre les deux. Pour éviter l'espace supplémentaire, utilisez le "." pour concaténer des chaînes en un seul argument.

La commande pourrait donc être:

execute "normal!" a:someArg . "l"

La commande exécutée sera:

normal! 2l
statox
la source
8
vous n'avez pas besoin du '.'. exe concatène les chaînes avec un espace sans celui-ci.
Christian Brabandt
1
@ChristianBrabandt Attendez sérieusement? Je ne le savais pas.
Tumbler41
@ChristianBrabandt Je ne le savais pas merci!
statox