Vim autocmd(保存文件、运行代码格式化程序、重新加载文件)

Vim autocmd(保存文件、运行代码格式化程序、重新加载文件),vim,uncrustify,Vim,Uncrustify,我希望将源代码格式化程序与Vim集成。以下两个选项中的任何一个都足够了 格式化我当前正在编辑的代码(即当按下gq时) 在保存文件时格式化代码,然后将格式化文件重新加载到当前Vim窗口中 备选方案1更可取。我试过了 set formatprg=uncrustify\ -c ~/misc/uncrustify.cfg --no-backup i、 我用命令行选项调用Uncrustify。 这是行不通的。Vi给出了E518:未知选项:~/misc/uncrustify.cfg错误 对于选项2,我在v

我希望将源代码格式化程序与Vim集成。以下两个选项中的任何一个都足够了

  • 格式化我当前正在编辑的代码(即当按下
    gq
    时)
  • 在保存文件时格式化代码,然后将格式化文件重新加载到当前Vim窗口中
  • 备选方案1更可取。我试过了

    set formatprg=uncrustify\ -c ~/misc/uncrustify.cfg --no-backup
    
    i、 我用命令行选项调用Uncrustify。 这是行不通的。Vi给出了
    E518:未知选项:~/misc/uncrustify.cfg
    错误

    对于选项2,我在vimrc文件中尝试了以下内容

    autocmd bufwritepost *.cpp ! ~/bin/uncrustify -c ~/misc/uncrustify.cfg --no-backup <afile>
    
    autocmd bufwritepost*.cpp~/bin/uncrustify-c~/misc/uncrustify.cfg--无备份
    

    文件在保存后格式化,但我必须手动将文件重新加载到Vim中。

    您是否尝试过转义空白:

    :set formatprg=uncrustify \-c\~/misc/uncrustify.cfg \--无备份

    更新

    uncrustify
    将“解析:170字节…”消息打印到stderr,因此我们需要将其重定向到
    /dev/null

    :set formatprg=uncrustify \-c\~/misc/uncrustify.cfg \-l\CPP \-无备份\2>/dev/null

    gq
    对行进行操作,因此您可以在可视模式下选择必要的行并执行
    gq
    。例如,如果要重新格式化整个文件,请执行
    ggVGgq


    更多信息请访问
    :帮助gq

    ,以删除VI错误。我还必须添加-l选项以将语言指定为CPP,因为uncrustify的输入来自stdin。但是,在vi中按gq不会格式化文件。如果我再次按下它,那么只有当前行被格式化,下面的行被添加到正在编辑的文件中——“解析:来自stdin的57个字节(57个字符)作为语言CPP”。我想我缺少的是如何配置formatprg命令来读取整个文件,然后防止将上述行输出到正在编辑的文件中。