Vim 带样式的代码格式化(vimrc 中的 formatprg)
Vim code formating with astyle (formatprg in vimrc)
我正在尝试使用 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
由于没有人回答,我将分享我的想法。
按照评论中给出的建议,我转义了传递给 astyle 的选项序列中的所有空格。然而,这导致 bash 试图解释选项,失败并友好地告诉我们:参见问题编辑。
似乎有效的解决方案是创建一个系统范围的 astyle 选项文件,并使用命令行参数将路径传递给该文件,而不是直接为其提供选项。
(这也可以通过项目选项文件来完成,但需要在每个项目的根目录下都有一个选项文件)
在我的主目录中获取我的选项文件 .astylerc
这会得到:
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ --options="/home/myusername/.astylerc"\
请注意,相对路径不起作用,但可以使用 'pseudo relative' 路径使用 $HOME
环境变量将路径写入选项文件,如 [=13] 中所述=]
我正在尝试使用 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
由于没有人回答,我将分享我的想法。 按照评论中给出的建议,我转义了传递给 astyle 的选项序列中的所有空格。然而,这导致 bash 试图解释选项,失败并友好地告诉我们:参见问题编辑。
似乎有效的解决方案是创建一个系统范围的 astyle 选项文件,并使用命令行参数将路径传递给该文件,而不是直接为其提供选项。 (这也可以通过项目选项文件来完成,但需要在每个项目的根目录下都有一个选项文件)
在我的主目录中获取我的选项文件 .astylerc
这会得到:
autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ --options="/home/myusername/.astylerc"\
请注意,相对路径不起作用,但可以使用 'pseudo relative' 路径使用 $HOME
环境变量将路径写入选项文件,如 [=13] 中所述=]