Как использовать переменную в выражении «нормальной» команды?

13

Как можно использовать переменную при выполнении чего-либо через normal!vimscript?

Пример:

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

Это должно переместить someArgшаги курсора вправо.

statox
источник
4
вам нужно использоватьexe "norm!" variable
Кристиан Брабандт

Ответы:

21

executeФункция принимает строку в качестве аргумента, он расширяет строку и выполнить ее аа регулярную команду экс. Таким образом, вы можете сделать:

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

Это .стандартный оператор vimscript для объединения строк.

executeможно сократить до exe.

Видеть :h :execute


РЕДАКТИРОВАТЬ Я добавлю пункт о комментарии @Christian Brabandt о конкатенации с ..

Док говорит:

Несколько аргументов объединяются с пробелом между ними. Чтобы избежать лишних пробелов, используйте "." оператор для объединения строк в один аргумент.

Таким образом, команда может быть:

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

Выполненная команда будет:

normal! 2l
statox
источник
8
вам не нужно "." exe объединит строки с пробелом без него.
Кристиан Брабандт
1
@ChristianBrabandt Подожди серьезно? Я не знал этого.
Tumbler41
@ChristianBrabandt Я не знал этого, спасибо!
statox