执行 vim 命令作为 git 预提交挂钩

Execute vim command as git pre-commit hook

我在 vim 中使用以下命令来批量自动格式化特定文件类型:

:args ~/someDirectory/**/*.filetype | argdo execute "normal gg=G" | update

我想弄清楚如何 运行 此命令作为预提交挂钩,以确保我关心的所有文件类型在提交前自动格式化。

我该如何完成?

提前致谢。

一个解决方案是 as in this answer,调用 vim:

files=`find /path/to/repo -name "*.filetype" -type f`
for file in $files
do
    vim -e -s -n "+normal gg=GZZ" $file
done

但是,您可以定义一个 clean 脚本来执行脚本(如上调用 vim),而不是使用 pre-commit 挂钩。

脚本通过 content filter driver, using a .gitattributes declaration 调用(在您的情况下:*.filetype)。


(图片来自"Customizing Git - Git Attributes" from "Pro Git book"))

一旦您在本地 git 配置中声明内容文件管理器驱动程序,它将自动在 git commit 上应用该脚本。

请参阅“Best practice - Git + Build automation - Keeping configs separate”中的完整示例。