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.