windows - vim:使用变量执行 shell 命令并将输出重定向到新缓冲区

标签 windows vim

我想从下面的函数调用 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/

相关文章:

c++ - 如何捕获来自某些进程的所有 HTTP 请求?

vim - 是否可以使用vim对象选择heredoc或 "here document"?

vim - 如何使用 vi 保存文件名中包含空格的任何文件?

python - 得到了一个 vim 映射来显示 python 代码错误。现在我只需要在出现错误时显示它

vim - 如何在 Vim 中改变一个词(以及所有其他出现的词)

vim 编辑 - 如何编辑搜索的突出显示部分或转换为可视 block

windows - 在 Windows 上,如何限制仅某些应用程序(而非用户)对文件夹、子文件夹和文件的访问

windows - 作为构建过程的一部分,如何在 Windows 机器上远程执行命令?

c# - 重命名正在运行的可执行 (exe) 文件

windows - Symfony2 : can't duplicate site because of strange folders architecture