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

问题描述 投票:0回答:1

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

以下内容在我的 vimrc 中:

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

如果在命令行模式下没有给出任何选项,astyle 将尝试查找名为 .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

进行格式化,并且我不介意每次都完全重新格式化整个文件,与这个
问题不同)

编辑: 在犯了一些愚蠢的错误之后,我按照 @romainl 评论中的建议转义了所有空格。然而,似乎有一个来自 vim 的错误,我无法解释:

/bin/bash: -c: line 1: syntax error: unexpected end of file shell returned 1 E485: Can't read file /tmp/vHXZmnp/3
    
vim code-formatting astyle
1个回答
1
投票
由于没有人回答,我将分享我设法想出的东西。 按照评论中给出的建议,我转义了传递给 astyle 的选项序列中的所有空格。然而,这会导致 bash 尝试解释选项,失败并善意地告诉我们:请参阅问题编辑。

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

将我的选项文件

.astylerc

放在我的主目录中,这会给出:

autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ --options="/home/myusername/.astylerc"\
请注意,相对路径不起作用,但可以使用 

$HOME

 环境变量,使用“伪相对”路径写入选项文件的路径,如 
astyle 文档中提到的

© www.soinside.com 2019 - 2024. All rights reserved.