使用换行符将参数传递给vim中的外部命令

时间:2014-01-10 16:07:36

标签: bash shell vim

当我与shell交互或编写bash脚本时,我可以这样做:

somecmd "some
arg"

现在说我想在vim命令行模式下执行相同的操作:

:!somecmd "some<Enter>arg"

显然不起作用:只要按<Enter>命令执行即可。但是以下都没有:

:!somecmd "some<C-V><Enter>arg"
:!somecmd "some<C-V>x0Aarg"

第一个插入回车而不是换行,这是正确的。第二个命令会将命令分成两部分,首先尝试执行somecmd "some<C-V>,然后执行arg",这两个命令都会失败。

我想我可以使用echo -e命令替换或嵌入$'\n'来解决这个问题,但是可以直接在vim的命令行中输入吗?我不完全理解"some<C-V>x0Aarg"形式在$'some\narg'时不起作用的原因。是否vim先前将字符串解析为shell评估?

1 个答案:

答案 0 :(得分:0)

嗯,我自己找到了答案,但无论如何我都要离开这里进一步参考。 :!州的文件:

  

换行符结束{cmd},后面的内容被解释为以下“:”命令。但是,如果在换行符之前有反斜杠,则会将其删除并继续{cmd}。在换行符之前有多少反斜杠并不重要,只删除一个反斜杠。

所以你(我)应该输入"some\<C-V>x0Aarg"而不是"some<C-V>x0Aarg"

另外,我可以使用system()函数而不是:!命令来完成它:

:call system("somecmd 'some<C-V>x0Aarg'")