Vim自动命令(保存文件、运行代码格式化器、重新加载文件)

7
我希望将源代码格式化工具Uncrustify集成到Vim中。以下两个选项中的任何一个都可以。
  1. 格式化我当前正在编辑的代码(即按下gq时)。
  2. 保存文件后格式化代码,然后重新加载格式化后的文件到当前Vim窗口。
选项1更可取。我尝试过
set formatprg=uncrustify\ -c ~/misc/uncrustify.cfg --no-backup

即我使用命令行选项调用Uncrustify。

但这并不起作用,Vi 给出了 E518: Unknown option: ~/misc/uncrustify.cfg 错误。

对于第二个选项,我尝试在 vimrc 文件中添加以下内容:

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

文件在保存后格式化了,但是我必须手动重新加载文件到Vim中。
1个回答

4

你尝试过转义空格吗:

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

更新

uncrustify 会将"解析:170字节..."的消息打印到stderr中,所以我们需要将其重定向到/dev/null

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

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

更多信息请参见:help gq


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接