Como usar uma variável na expressão de um comando 'normal'?

13

Como alguém pode usar uma variável ao executar algo via normal!no vimscript?

Exemplo:

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

Isso deve mover as someArgetapas do cursor para a direita.

statox
fonte
4
você precisa usarexe "norm!" variable
Christian Brabandt

Respostas:

21

A executefunção pega uma string como argumento, expande a string e executa um comando ex regular. Assim você pode fazer:

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

O .é um operador vimscript padrão para concatenar seqüências de caracteres.

executepode ser reduzido para exe.

Vejo :h :execute


EDIT Vou adicionar um ponto sobre o comentário de @Christian Brabandt sobre a concatenação com a ..

O documento diz:

Vários argumentos são concatenados, com um espaço no meio. Para evitar o espaço extra, use o "." operador para concatenar seqüências de caracteres em um argumento.

Portanto, o comando pode ser:

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

O comando executado será:

normal! 2l
statox
fonte
8
você não precisa do '.'. exe concatenará seqüências de caracteres com um espaço sem ele.
Christian Brabandt 22/09
1
@ChristianBrabandt Espera a sério? Eu não sabia disso.
precisa saber é o seguinte
@ChristianBrabandt Eu não sabia disso, obrigado!
statox