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.


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.