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


13

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

Пример:

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

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


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

8
вам не нужно "." exe объединит строки с пробелом без него.
Кристиан Брабандт

1
@ChristianBrabandt Подожди серьезно? Я не знал этого.
Tumbler41

@ChristianBrabandt Я не знал этого, спасибо!
statox
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.