我有这个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>'
答案 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>)
它有效