是否可以在vim命令中使用多个参数

时间:2011-04-12 22:24:26

标签: vim

我有这个mvn命令

mvn install:install-file -DgroupId=i.hate.james.blunt -DartifactId=yourartifactid... -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/jarfile

我希望将它转移到vim中的命令,此刻我有这个

command -nargs=* MvnAddToRepositoy :!mvn install:install-file -DgroupId=i.hate.james.blunt -DartifactId=<arg1> -Dversion=1.0 -Dpackaging=jar -Dfile=<arg2>

我无法在vim文档或网上的示例中找到这个。

有人可以帮忙吗?

修改

上面的错误消息是说它正在尝试的命令

mvn install:install-file -DgroupId=mx.com.root -DartifactId=<arg1> -Dversion=1.0 -Dpackaging=jar -Dfile=<arg2>'

2 个答案:

答案 0 :(得分:9)

我的理解是,Vim不会像您认为的那样使用<arg1><arg2>占位符来访问多个args。你是从某个地方的文档那里得到的吗?

您可能需要查看<f-args>的帮助。这允许您定义自己的函数,您可以将参数传递给函数,并处理函数中的内容以便以您希望的方式调用shell命令。

这是来自Vim的帮助:

" Call a user function (example of <f-args>)
:com -nargs=* Mycmd call Myfunc(<f-args>)

When executed as: 
    :Mycmd arg1 arg2
This will invoke: 
    :call Myfunc("arg1","arg2")

我假设你可以在Myfunc中写东西来做你想做的事。例如下面的(未经测试的)代码。

function Myfunc(myarg1, myarg2)
     execute '!mvn install:install-file -DgroupId=i.hate.james.blunt -DartifactId=' . 
        \   a:myarg1 . ' -Dversion=1.0 -Dpackaging=jar -Dfile=' . a:myarg2
endfunction

答案 1 :(得分:0)

使用赫伯特的答案,函数看起来像这样:

" Adds dependencies to local m2 repo
fun! FunMvnAddToRepository(artifactid, pathtojar)
    execute '!mvn install:install-file -DgroupId=mx.com.root -DartifactId=' . 
   \   a:artifactid . ' -Dversion=1.0 -Dpackaging=jar -Dfile=' . a:pathtojar
endfunction

命令看起来像这样:

" Adds dependencies to local m2 repo
command -nargs=* MvnAddToRepositoy call FunMvnAddToRepository(<f-args>)

它有效