2013-09-26 53 views
0

我正尝试在VIM中使用“exe”运行shell命令。我有一个包含一个系统调用(路径名)Shell命令中的不需要的换行符(来自VIM)

tempName=system('run.sh') "tempname is actually equal to "/path/to/file/tempfile.do" 

我想使用的变量tempName在另一个shell命令结果的变量:

exe '! cat '.tempName.' >> anotherFile' 

那么应该怎么运行是:

cat /path/to/file/tempFile.do >> anotherFile 

,但由于某些原因, “>> anotherFile” 部分被切断,只有

cat /path/to/file/tempFile.do 

正在运行。我试图逃避“>>”字符和“。”哪些不起作用。有任何想法吗?

回答

1

当您按字面输入时是否有效?

:execute '!cat /path/to/file/tempFile.do >> anotherFile' 

如果是这样,那么问题是system()捕获输出包括换行符。

一种解决方案是采用剥离的substitute()最后换行符:

:execute '!cat '.substitute(tempName, '\n$', '', '').' >> anotherFile' 
+0

是的,如果按照字面输入的话,它可以正常工作,替代品的效果很好。应该有这个想法。谢谢。 – user2820954

1

这适用于我。请注意后面的空格cat

:exe '! cat '.tempName.' >> anotherFile' 
+0

谢谢,这基本上就是我一直想(丢失的空间是一个错字)。问题在于Bash将文件捕获到屏幕上,而不是将其附加到“anotherFile”。 “>> anotherFile”部分甚至不出现在BASH中。标题中的换行符是因为如果你在VIM中回显命令,它会将其分成两行,我认为这可能是导致问题的原因。 – user2820954