在 vim 脚本中执行的 shell 命令的输出可以重定向到文件吗?

问题描述

我正在尝试为 vim 的 Go 项目生成标签。由于 ctags 没有对 go 的原生支持,因此我使用 gotags。我编写了一个小的 vim 函数检查文件是否为 .go,如果是,则使用 gotags 而不是 ctags:

    function! g:GenerateTags()
        if &filetype == 'go'
            !gotags -R -f tags .
        else
            !ctags -R .
        endif
    endfunction

这适用于其他语言,但 gotags 只是输出到控制台而不是文件。我也试过:

system('gotags -R -f tags .')
system('gotags -R . > tags')
execute !gotags -R . > tags

输出仍被定向到控制台。

有没有办法将其重定向文件

解决方法

当我再次尝试使用此处发布的第一个版本时,我的 vimrc 中的版本似乎有误:

    function! g:GenerateTags()
        if &filetype == 'go'
             !gotags -R -f tags .
        else
            !ctags -R .
        endif
    endfunction