¿Cómo usar una variable en la expresión de un comando 'normal'?

13

¿Cómo se puede usar una variable al ejecutar algo a través normal!de vimscript?

Ejemplo:

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

Esto debería mover los someArgpasos del cursor hacia la derecha.

statox
fuente
44
que necesita usarexe "norm!" variable
Christian Brabandt

Respuestas:

21

La executefunción toma una cadena como argumento, expande la cadena y la ejecuta como un comando ex regular. Así puedes hacer:

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

El .es un operador vimscript estándar para concatenar cadenas.

executese puede acortar a exe.

Ver :h :execute


EDITAR Agregaré un punto sobre el comentario de @Christian Brabandt sobre la concatenación con a ..

El documento dice:

Múltiples argumentos están concatenados, con un espacio en el medio. Para evitar el espacio extra, use el "." operador para concatenar cadenas en un argumento.

Entonces el comando podría ser:

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

El comando ejecutado será:

normal! 2l
statox
fuente
8
no necesitas el '.'. exe concatenará cadenas con un espacio sin él.
Christian Brabandt
1
@ChristianBrabandt ¿Espera en serio? No sabía eso.
Tumbler41
@ChristianBrabandt ¡No lo sabía gracias!
statox