13

How can one use a variable when executing something via normal! in vimscript?

Example:

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

This should move the cursor someArg steps to the right.

21

The execute function takes a string as argument, it expands the string and execute it a a regular ex command. Thus you can do:

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

The . is a standard vimscript operator to concatenate strings.

execute can be shortened to exe.

See :h :execute


EDIT I'll add a point about the comment of @Christian Brabandt about the concatenation with a ..

The doc says:

Multiple arguments are concatenated, with a space in between. To avoid the extra space use the "." operator to concatenate strings into one argument.

So the command could be:

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

The executed command will be:

normal! 2l
  • 8
    you don't need the '.'. exe will concatenate strings with a space without it. – Christian Brabandt Sep 22 '16 at 20:33
  • 1
    @ChristianBrabandt Wait seriously? I did not know that. – Tumbler41 Sep 22 '16 at 20:36
  • @ChristianBrabandt I didn't know that thanks! – statox Sep 23 '16 at 7:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy