【问题标题】:Vim autocmd (save file, run code formatter, reload file)Vim autocmd(保存文件,运行代码格式化程序,重新加载文件)
【发布时间】:2012-04-04 16:35:46
【问题描述】:

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

  1. 格式化我当前正在编辑的代码(即按下gq 时)。
  2. 在我保存文件时格式化代码,然后将格式化后的文件重新加载到当前 Vim 窗口中。

选项 1 更可取。我试过了

set formatprg=uncrustify\ -c ~/misc/uncrustify.cfg --no-backup

即我用命令行选项调用 Uncrustify。 这不起作用。 Vi 给出了E518: Unknown option: ~/misc/uncrustify.cfg 错误。

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

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

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

【问题讨论】:

    标签: vim uncrustify


    【解决方案1】:

    您是否尝试过转义空格:

    :set formatprg=uncrustify\ -c\ ~/misc/uncrustify.cfg\ --no-backup

    更新

    uncrustify 向 stderr 打印“Parsing: 170 bytes ...”消息,因此我们需要将其重定向到/dev/null

    :set formatprg=uncrustify\ -c\ ~/misc/uncrustify.cfg\ -l\ CPP\ --no-backup\ 2&gt;/dev/null

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

    更多信息:help gq

    【讨论】:

    • 消除了VI错误。我还必须添加 -l 选项以将语言指定为 CPP,因为 uncrustify 的输入来自标准输入。但是,在 vi 中按 gq 不会格式化文件。如果我再次按下它,那么唯一的当前行将被格式化,并且将以下行添加到正在编辑的文件中 - “Parsing: 57 bytes (57 chars) from stdin as language CPP”。我想我缺少的是如何配置 formatprg 命令来读取整个文件,其次是防止将上面的行输出到正在编辑的文件中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2010-11-24
    • 2023-01-31
    相关资源
    最近更新 更多