在Vimscript中通过normal!执行某些操作时如何使用变量?

示例:

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


这应将光标someArg步骤移至对。

评论

您需要使用exe“规范”!变量

相关:vi.stackexchange.com/q/21392/10604

#1 楼

execute函数将字符串作为参数,它将扩展该字符串并通过常规ex命令执行它。因此,您可以执行以下操作:

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


.是连接字符串的标准vimscript运算符。

execute可以缩短为exe

请参阅:h :execute


编辑我将对@Christian Brabandt的评论与.串联进行补充。

文档中说:


多个参数被串联在一起,之间有一个空格。为避免多余的空间,请使用“。”
运算符将字符串连接成一个参数。


因此命令可以是:

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


执行的命令将是:

normal! 2l


评论


您不需要'。'。 exe将使用空格将字符串连接在一起。

–克里斯蒂安·布拉班德(Christian Brabandt)
16-09-22在20:33

@ChristianBrabandt认真等待吗?我不知道。

– Tumbler41
16-09-22在20:36

@ChristianBrabandt我不知道谢谢你!

–statox♦
16-09-23在7:42

#2 楼

为了完整起见,我发现使用.进行的字符串连接阅读起来并不愉快。我们可以使用printf连接字符串和变量,以提高可读性。
execute printf("normal! %sl", a:someArg)


评论


而且,如果您希望a:someArg是一个计数,您甚至可以在您的printf格式中使用%d强制执行该解释。

–filbranden♦
20/09/24在11:25