如何在用户定义的命令中使用函数?作为一个简单的具体例子:
我怎么写一个命令回应传递给它的参数?
我有这个:
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
与往常一样,“执行”将执行您传递给它的任何内容,所以要小心。
| 归档时间: |
|
| 查看次数: |
7098 次 |
| 最近记录: |