如何重新格式化/重新缩进给定目录中的所有源文件?

fdi*_*rre 14 command-line source-code software-recommendation

给定一个包含源代码树的目录,是否有一种简单的命令行方法可以将每个源文件替换为其精美的重新格式化的等效文件?

请记住,项目的源代码树通常还包含非源文件,并且源代码本身可能使用不同的语言。

我正在寻找一些支持尽可能多语言的工具,因为一个项目通常包含多种不同语言的源代码。特别是,我会寻找支持 xml/html、javascript、ruby 和 java 的东西。

tak*_*san 7

您可以从终端在 ex 和命令模式下使用 vim。

缩进单个文件:

vim -c "normal gg=G" -e <file-to-indent> <<'EOF'
:wq
EOF
Run Code Online (Sandbox Code Playgroud)

要递归缩进文件,请创建以下脚本:

缩进vim.sh

vim -c "normal gg=G" -e $1 <<'EOF'
:wq
EOF
Run Code Online (Sandbox Code Playgroud)

现在,输入:

$ chmod u+x indent-with-vim.sh
$ find . | xargs -I {} ./indent-with-vim.sh {}
Run Code Online (Sandbox Code Playgroud)

Vim 将尽最大努力重新缩进文件。您可以改进一些特定的文件类型。

对于 XML:

改进 PHP 格式:

下载http://www.vim.org/scripts/download_script.php?src_id=15001 (它会下载一个名为 php.vim 的文件)

在您的家中创建以下目录:

~/.vim/indent

并复制php.vim~/.vim/indent

如果您对任何文件类型的结果不满意,您可以在网络上寻找替代品(如 HTML 的 htb,用于 Ruby 改进的https://github.com/vim-ruby/vim-ruby,等等)。

无论哪种方式,您都可以使用 或 .vimrc 技术或 foo.vim 缩进文件来改进缩进。

此外,您可以更改查找参数以仅应用于某些特定类型,例如:

find . -iname "*.html" -or -iname "*.xml"
Run Code Online (Sandbox Code Playgroud)