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.


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.