当我与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评估?
答案 0 :(得分:0)
嗯,我自己找到了答案,但无论如何我都要离开这里进一步参考。 :!
州的文件:
换行符结束{cmd},后面的内容被解释为以下“:”命令。但是,如果在换行符之前有反斜杠,则会将其删除并继续{cmd}。在换行符之前有多少反斜杠并不重要,只删除一个反斜杠。
所以你(我)应该输入"some\<C-V>x0Aarg"
而不是"some<C-V>x0Aarg"
。
另外,我可以使用system()
函数而不是:!
命令来完成它:
:call system("somecmd 'some<C-V>x0Aarg'")