使用 astyle 格式化 Vim 代码(vimrc 中的 formatprg)

Posted

技术标签:

【中文标题】使用 astyle 格式化 Vim 代码(vimrc 中的 formatprg)【英文标题】:Vim code formating with astyle (formatprg in vimrc) 【发布时间】:2021-01-29 07:44:12 【问题描述】:

我正在尝试使用astyle 作为我在 Vim 中的代码格式化程序。但是,我似乎找不到如何告诉 vim 哪些选项用于 astyle。

以下是我的vimrc:

autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\

如果在命令行模式下没有给定选项,astyle 将尝试查找选项文件named .astyle。但是,这似乎在这里不起作用。 (即:当我在 vim 中格式化时:gqG 结果与我从命令行调用 astyle 完全不同!) 这是我的 .astyle 选项文件:

 --style=allman
 --mode=c
 --attach-classes              # -xc
 --attach-closing-while        # -xV
 --indent-classes              # -C
 --keep-one-line-blocks        # -O
 --keep-one-line-statements    # -o
 --align-pointer=name          # -k3                                

所以我尝试简单地在我的 vimrc 中指定选项,就像在这个 answer 中一样:

autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ --style=allman --mode=c -xc -xV -C -O -o -k3

完整地保存、获取、重新加载 vim:没有变化。这些选项似乎没有生效。当我使用gggqG 格式化时,结果仍然不是我的选项所要求的......谁能明白为什么这不起作用?

(注意:我希望能够使用gq 进行格式化,而且我不介意每次都重新格式化整个文件,这与question 不同)

编辑: 在经历了一些愚蠢的错误之后,我已经按照@romainl 评论中的建议避开了所有空格。但是似乎有一个来自 vim 的错误,我无法解释:

/bin/bash: -c: line 1: syntax error: unexpected end of file

shell returned 1

E485: Can't read file /tmp/vHXZmnp/3

【问题讨论】:

&formatprg:astyle\ --style=allman\ --mode=c\ -xc\ ...的值中的所有空格都需要转义。 @romainl 真的那么简单吗? -_- 只有一种方式知道...... 【参考方案1】:

由于没有人回答,我将分享我设法提出的想法。 按照 cmets 中给出的建议,我转义了传递给 astyle 的选项序列中的所有空格。然而,这导致 bash 试图解释选项,失败并善意地告诉我们:请参阅问题编辑。

似乎可行的解决方案是创建一个系统范围的 astyle 选项文件,并使用命令行参数将路径传递给该文件,而不是直接给它选项。 (这可能也可以通过项目选项文件来完成,但需要在每个项目的根目录下都有一个选项文件)

将我的选项文件 .astylerc 放在我的主目录中:

autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ --options="/home/myusername/.astylerc"\

请注意,相对路径不起作用,但可以使用 $HOME 环境变量使用“伪相对”路径将路径写入选项文件,如 astyle documentation 中所述

【讨论】:

以上是关于使用 astyle 格式化 Vim 代码(vimrc 中的 formatprg)的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS下不一样的Vim 体验-VimR

MDK(KEIL)使用Astyle格式化代码

c++代码格式化工具神器AStyle介绍

keil中使用Astyle格式化你的代码的方法2篇合

使用Astyle格式化代码

SourceInsight工具增强——AStyle(代码格式化)PC-Lint(静态检查)