【问题标题】:Execute vim command as git pre-commit hook执行 vim 命令作为 git pre-commit 钩子
【发布时间】:2017-11-20 02:52:13
【问题描述】:

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

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

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

我将如何做到这一点?

提前致谢。

【问题讨论】:

    标签: git vim githooks pre-commit-hook pre-commit


    【解决方案1】:

    一种解决方案是,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 脚本,而不是使用pre-commit 挂钩,该脚本将执行一个脚本(如上调用vim)。

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


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

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

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

    【讨论】:

    • 感谢您让我走上正轨,但我并不完全在那里。过滤器似乎期望标准输入并写入标准输出。如果我只想格式化正在提交的文件,我将如何去做? %f 表示它会通过文件名,但在过滤器需要标准输入和标准输出的状态之后立即显示文档。那么鉴于这一切,如何将我的 vim 命令应用于正在提交的特定文件?
    • @RyanPrice “如果我只想格式化正在提交的文件,我该怎么做?”:这就是一个干净的脚本所做的:它只格式化即将提交的文件.从那里,查看您是否无法将内容传递给 vim 命令,如 vi.stackexchange.com/a/5994
    猜你喜欢
    • 2017-05-15
    • 2020-05-21
    • 2014-02-15
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    相关资源
    最近更新 更多