git vi 不是一个标准的、内置的 Git 命令。

它通常是用户在 Git 环境下,结合了 Git 和 Vi 编辑器的一个习惯性说法,它指的是“使用 Vi 编辑器来编辑 Git 相关的文件”。
最常见的场景是当你执行某些 Git 命令(如 git commit)时,Git 会自动打开一个文本编辑器,让你输入提交信息(commit message),如果你的系统配置了 Vi 作为默认编辑器,那么这个编辑器窗口就是 Vi。
下面我将从三个方面详细解释这个概念:
git vi的实际含义:Git 如何调用 Vi- 如何配置 Vi 作为 Git 的默认编辑器
- 在 Git 中使用 Vi 的常见场景和操作
git vi 的实际含义:Git 如何调用 Vi
当 Git 需要你编辑文本时(例如提交信息、合并冲突等),它会执行一个外部编辑器程序,它会按照以下优先级顺序来决定使用哪个编辑器:

- 命令行参数:如果你在执行 Git 命令时明确指定了编辑器,
git commit --edit-editor my-editor,那么就会使用这个编辑器。 - 环境变量:Git 会检查环境变量
GIT_EDITOR,如果这个变量被设置了,Git 就会使用它指定的编辑器。export GIT_EDITOR=vim # 将 vim 设置为 Git 的编辑器
- 配置变量:Git 会检查你自己的 Git 配置
core.editor,这是最常用和推荐的方式。git config --global core.editor "vim"
- 环境变量:如果以上都没有设置,Git 会检查通用的编辑器环境变量,如
VISUAL或EDITOR。export EDITOR=vim
- 编译时的默认值:如果以上所有设置都没有,Git 会回退到它在编译时设定的默认编辑器,这通常是
vi(在类 Unix 系统上)或Notepad(在 Windows 上)。
当人们说“我用了 git vi”,他们真正的意思是: “Git 的默认编辑器被设置为了 vi(或 vim),所以当 Git 需要我输入提交信息时,一个 Vi 编辑器窗口就弹出来了。”
如何配置 Vi 作为 Git 的默认编辑器
这是实现“git vi”效果的关键步骤,我们推荐使用 git config 命令,因为它只对 Git 生效,不会影响你系统的其他程序。
为当前用户配置(推荐)
这个配置只对当前登录用户生效,不会影响其他用户。
# 使用 vi git config --global core.editor "vi" # 使用 vim (更现代、功能更强大的 vi 克隆版,强烈推荐) git config --global core.editor "vim"
为什么推荐用 vim?
vim 是 vi 的增强版,拥有语法高亮、更好的撤销/重做机制、更直观的操作等,对于编写提交信息等任务体验更好,在大多数现代 Linux 和 macOS 系统上,vim 都是默认安装的。

为当前仓库配置
如果你只想为某一个特定的 Git 仓库设置编辑器,可以去掉 --global 标志,进入该仓库的目录后执行:
cd /path/to/your/repo git config core.editor "vim"
临时指定编辑器
如果你只是这一次想用 Vi,不想改全局配置,可以在执行 Git 命令时临时指定:
git commit --edit-editor=vim
在 Git 中使用 Vi 的常见场景和操作
一旦你配置了 Vi 作为默认编辑器,以下几种情况都会启动 Vi:
场景 A:编写提交信息 (git commit)
这是最常见的场景。
-
你在终端输入
git commit。 -
Git 会打开一个 Vi 窗口,内容通常是类似下面的模板:
# 请输入提交信息,以 '#' 开头的行将被忽略,而一个空提交消息将会中止提交。 # # On branch main # Your branch is up to date with 'origin/main'. # # Changes to be committed: # modified: README.md # new file: src/main.js #
-
在 Vi 中操作:
-
按
i键进入插入模式,此时你可以自由输入文字。 -
输入你的提交信息,
feat: 添加用户登录功能 - 实现了基于 JWT 的认证 - 添加了登录和注册的 API 端点
-
输入完成后,按
Esc键退出插入模式,回到普通模式。 -
输入
wq然后按Enter键。w是保存,q是退出。wq就是保存并退出。 -
Git 会读取你保存的内容,完成提交。
-
场景 B:解决合并冲突 (git merge 或 git rebase)
当合并发生冲突时,Git 会打开一个包含冲突标记的文件,让你手动解决。
- 可能如下:
<<<<<<< HEAD my code from current branch ======= my code from the branch I'm merging >>>>>>> feature-branch
- 在 Vi 中操作:
- 你需要手动删除
<<<<<<<、 和>>>>>>>这些标记行。 - 保留你想要保留的代码,可能是上面部分,也可能是下面部分,或者两者的结合。
- 修改完成后,按
Esc,输入wq保存退出。 - Git 会继续处理合并流程。
- 你需要手动删除
场景 C:编辑标签信息 (git tag -a)
当你创建一个带注释的标签时,Git 会打开编辑器让你输入标签的详细说明。
git tag -a v1.0.0
之后 Vi 会弹出,让你输入标签描述。
Vi 基础操作速查表
对于不熟悉 Vi 的新手,这里是一些最核心的操作:
| 功能 | 命令 | 说明 |
|---|---|---|
| 模式切换 | i |
进入插入模式,在光标前开始输入。 |
a |
进入插入模式,在光标后开始输入。 | |
Esc |
退出插入模式,回到普通模式。 | |
| 保存与退出 | w |
保存文件。 |
q |
退出文件,如果未修改,会直接退出。 | |
wq |
保存并退出。 | |
q! |
强制退出,不保存任何修改。 | |
| 移动光标 | h |
向左移动。 |
j |
向下移动。 | |
k |
向上移动。 | |
l |
向右移动。 | |
gg |
跳转到文件第一行。 | |
G |
跳转到文件最后一行。 | |
| 删除与修改 | x |
删除光标所在处的字符。 |
dd |
删除当前行。 | |
u |
撤销上一步操作。 |
git vi不是命令,而是“使用 Vi 编辑器处理 Git 任务”的简称。- 通过
git config --global core.editor "vim"可以轻松配置 Vim 为你的 Git 默认编辑器。 - 主要用于编写提交信息和解决合并冲突。
- 掌握 Vi 的
i(进入编辑)、Esc(退出编辑)、wq(保存退出) 三个基本操作,就足以应对绝大多数 Git 中的编辑任务。
