Jak używać zmiennej w wyrażeniu „normalnego” polecenia?

13

Jak można użyć zmiennej podczas wykonywania czegoś normal!w vimscript?

Przykład:

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

To powinno przesunąć someArgkroki kursora w prawo.

statox
źródło
4
musisz użyćexe "norm!" variable
Christian Brabandt

Odpowiedzi:

21

executeFunkcja przyjmuje ciąg jako argument, rozszerza łańcuch i wykonać polecenie aa regularne ex. W ten sposób możesz:

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

.To standardowy operator vimscript do łączenia ciągów.

executemożna skrócić do exe.

Widzieć :h :execute


EDIT Dodam punkt na temat komentarza @Christian Brabandt o konkatenacji z ..

Doktor mówi:

Wiele argumentów jest łączonych ze spacją między nimi. Aby uniknąć dodatkowego miejsca, użyj „.” operator do łączenia łańcuchów w jeden argument.

Tak więc polecenie może wyglądać następująco:

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

Wykonane polecenie będzie:

normal! 2l
statox
źródło
8
nie potrzebujesz „.”. exe połączy łańcuchy ze spacją bez niego.
Christian Brabandt,
1
@ChristianBrabandt Czekać poważnie? Nie wiedziałem tego.
Tumbler41,
@ChristianBrabandt Nie wiedziałem, że dzięki!
statox