在Vim脚本中传递和使用参数命令

Tom*_*Tom 12 vim

如何在用户定义的命令中使用函数?作为一个简单的具体例子:

我怎么写一个命令回应传递给它的参数?

我有这个:

command -nargs=1 FW execute ":echo ".<args>
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时:

:FW something
Run Code Online (Sandbox Code Playgroud)

我明白了:

E121:未定义的变量:某事

E15:表达式无效:":echo".something

Ing*_*kat 12

因为:echo需要一个表达式,所以必须引用一个字符串.这是如此常见,以至于Vim有一个特殊的符号; 见:help <q-args>.现在,因为 :execute,你需要另一个级别的引用(根据你的评论,你似乎走了这条道路):

:command! -nargs=1 FW execute "echo" string(<q-args>)
Run Code Online (Sandbox Code Playgroud)

此外,您不需要显式连接.; 该:execute命令隐含地执行此操作,您可以放弃:.

但这种双引号不是必要的; 你可以跳过:execute:

:command! -nargs=1 FW echo <q-args>
Run Code Online (Sandbox Code Playgroud)


小智 5

当您将命令传递给“执行”时,不需要冒号,它会像您已经处于命令模式一样执行。

您也不需要用“.”连接字符串。如果您希望它们之间有空格,则使用execute,默认情况下它会用空格连接多个参数。

我尝试转义参数,以便将其连接为字符串,这似乎有效:

command -nargs=1 FW execute "echo" '<args>'
Run Code Online (Sandbox Code Playgroud)

这是您想要实现的目标吗?

:h 执行和 :h 用户命令值得一读。

编辑:对此进行一些测试:

:FW "test"
Run Code Online (Sandbox Code Playgroud)

测试

:FW &shellslash
Run Code Online (Sandbox Code Playgroud)

1

:FW 45
Run Code Online (Sandbox Code Playgroud)

45

:FW "2+2"
Run Code Online (Sandbox Code Playgroud)

“2+2”

:FW 2+2
Run Code Online (Sandbox Code Playgroud)

4

与往常一样,“执行”将执行您传递给它的任何内容,所以要小心。