如何向CLI工具唤起的Vim发送命令?附Git提交改写方案
Git Commit Amend 自动化与向CLI唤起的Vim发送命令的方案
你编写的commitUpdate函数确实是个跳过编辑器交互的高效方案,它直接复用上次提交的信息完成amend,随后强制推送,代码如下:
commitUpdate() { git commit --amend -m "$(git log -1 --pretty=%B)" git push -f }
针对你提出的如何向CLI工具唤起的Vim发送命令的问题,以下是几种实用方法:
1. 通过标准输入传递命令
Vim支持从标准输入接收操作指令,你可以用输入重定向或管道的方式自动发送:wq这类命令:
- 输入重定向写法:
git commit --amend << EOF :wq EOF
- echo管道写法:
echo -e ":wq\n" | git commit --amend
如果需要修改提交信息,也可以把新内容和退出命令一起传入:
cat << EOF | git commit --amend 修复了XX功能的bug :wq EOF
2. 利用Vim的批处理启动参数
Vim提供-c参数,允许你指定启动后立即执行的命令。你可以通过临时修改GIT_EDITOR环境变量,让Git调用带参数的Vim:
GIT_EDITOR='vim -c ":wq"' git commit --amend
如果需要修改提交信息,还可以结合替换命令,比如替换第一行的提交标题:
GIT_EDITOR='vim -c "1s/.*/修复XX功能bug/" -c ":wq"' git commit --amend
3. 自定义Git编辑器脚本
你可以写一个简单的Shell脚本作为Git的编辑器,自动处理提交信息并退出。比如创建auto-commit-edit.sh:
#!/bin/bash # 这里可以修改提交信息文件的内容,比如替换文本 sed -i '1c 新的提交标题' "$1" # 直接保存退出 exit 0
给脚本赋予执行权限:
chmod +x auto-commit-edit.sh
之后执行Git命令时指定这个编辑器:
GIT_EDITOR='./auto-commit-edit.sh' git commit --amend
也可以把它设为全局默认编辑器:
git config --global core.editor './auto-commit-edit.sh'
内容的提问来源于stack exchange,提问作者ReckerDan
相关产品推荐
相关产品推荐

