我想从下面的函数调用 msbuild 并将输出重定向到新的缓冲区。
我的问题是我需要使用一个变量作为文件名,因此不能使用“!” (我可以吗?),当我使用 exe 或 system() read 时,我会提示我没有给它一个正确的文件。
func! myFunction()
let findstr = "findstr /s /m " . '"' . expand("%:t") . '"' . " *.vcxproj"
for project in split(system(findstr), nr2char(10))
echo "Building '" . project . "'"
let msbuild = "c:\\windows\\Microsoft.NET\\Framework\\v4.0.30319\\msbuild.exe" . " " . project . " " . "/t:rebuild /p:configuration=debug"
:tabnew | r system(msbuild) "<--THIS LINE HERE
endfor
endfunc
最佳答案
:read
命令采用文件而不是 vim 表达式。但是它可以通过 :read !{cmd}
从标准输出读入。示例 :%r!ls
。使用 :execute
命令,您可以使用变量构建新命令。
exe '%r!' . msbuild
或者,如果您想使用像 system()
这样的表达式,您可以将 :put
与表达式寄存器一起使用。 (可能想用 :0d_
来删除第一个空行)
put=system(msbuild)
现在看来您正在尝试构建项目并获取错误列表。我建议您查看 :make
、'makeprg'
选项和 quickfix
列表,因为这是构建一个更 vim 的方式。项目。
更多帮助请参见:
:h :r!
:h :exe
:h :pu
:h @=
:h :make
:h 'makeprg'
:h quickfix
关于windows - vim:使用变量执行 shell 命令并将输出重定向到新缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15506255/