惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
小众软件
小众软件
J
Java Code Geeks
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
L
LangChain Blog
博客园 - 司徒正美
量子位
Y
Y Combinator Blog
C
Check Point Blog
T
Tailwind CSS Blog
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
B
Blog RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
V
V2EX
阮一峰的网络日志
阮一峰的网络日志

Vim

vimls-go 0.1.0:用 Go 写的 Vim script / Vim9 语言服务器 - V2EX 分享一个 vim 中执行脚本的小技巧 - V2EX 分享一个 vim 和 tmux 的小技巧 请问怎样在 GVim 中优雅地切换中英文输入法? 有没有喜欢折腾 vim 的 请教一下 VIM 怎么做到类似 idea ide 一样识别函数,自动跳转,查看引用? 现在 vim 为啥要默认进入鼠标那种模式 [插件] step-search.nvim,一个更符合直觉的多关键词聚合搜索工具 请问是否能修改 GVim 标题栏的颜色 插件: nvim-dap-unity IdeaVim 新插件推荐: 优化搜索/命令执行框 https://github.com/yelog/ideavim-cmdfloat vscodevim 中英文切换异常 写了一个 Neovim 国际化插件 i18n.nvim Lazyvim grep 搜索,弹出来的右侧窗口怎么设置内容自动换行? 只会:q?关于 Vim 退出方式,不会还有人知道的比我还多吧? 求问 VS Code 中使用 Vim 插件, Normal 模式下 Tab 被接管了(Insert 模式下可以),没办法接受 AI 的代码提示,有无解决方法? 不知道为什么存在的 vim 快捷键 有无公司要求开发用 Vim 编辑器? coc.nvim 近期的主要更新 vim 执行外部 shell 命令时卡顿,求解决方式 十分尴尬,被导师推荐去使用 JetBrains Nvim 输入法的自动切换 写了一个 flash.nvim on ideavim 的插件 vim-flash, 有兴趣的可以试试 请教 Debian 12.6 的 vi 和 vim.tiny 指向同一文件却执行效果不同疑问 nvim 无法粘贴到转存到系统剪切板 The ObjectSense Programming Language : An object-oriented reincarnation of VimL nvim 复制改键 使用 Vim 的时候遇到了一点问题 vim 无法设置无名寄存器作为系统剪切板 awesome-nvim-conf:中文用户 nvim 配置仓库
在 Vim 中优雅使用 Git:一种高效工作流
Yggdroot · 2026-04-17 · via Vim

Git 与 Vim 堪称程序员的效率利器,但在 Vim 中开发时,频繁切换到终端执行 Git 命令(如 git statusgit add -pgit commit),往往会打断编码心流、影响开发节奏。 现在,借助 LeaderF 内置的 Git 功能,你可以将完整的 Git 工作流无缝融入 Vim 环境,显著提升开发效率。

本文重点介绍一个核心命令:

:Leaderf git status

查看当前 Git 状态

在 Vim 中输入上述命令,即可看到如下界面:

界面主要由两部分组成:

左侧为导航面板( Navigation Panel ),以文件树形式呈现 git status 的结果,并按状态分组:

  • Staged Changes:已暂存的文件(将被提交)
  • Unstaged Changes:工作区中已修改但未暂存的文件
  • Untracked Files:未被 Git 跟踪的文件

右侧为Diff View 面板,用于展示文件的具体改动,支持两种视图:

  • Unified Diff View

    实现了字符级差异对比,并高亮显示差异部分。传统git diff没有高亮显示差异。

  • Side-by-Side Diff View 优点:更直观,适合详细对比代码差异

两个面板协同工作:

  • 左侧负责文件选择与状态管理
  • 右侧负责差异查看与精细操作

共同构成一套流畅的 Git 可视化工作流。

文件级别操作

在导航面板中,可对文件执行以下操作:

快捷键 功能 说明
s Stage / Unstage 文件 在 unstaged 文件上执行,文件加入暂存区;在 staged 文件上执行,文件从暂存区移出来
d Discard 文件修改 丢弃文件修改(有确认提示)
D 强制 Discard 文件修改 丢弃文件修改(无确认提示,慎用)
r 刷新文件树 当外部修改了 Git 状态时刷新界面
Enter / o 打开对应文件的 Diff 视图 查看文件的详细修改内容

注意sdD 同样适用于目录操作(包括仓库根目录)。将光标置于目录上即可执行对应操作。 在 Untracked Files 上执行 dD 会删除对应文件。 导航面板中还有其他快捷键,可按 F1 查看帮助。

代码块( hunk )级别操作

在 Diff 视图中,可以精细操作每个 hunk (代码块):

快捷键 功能 说明
s Stage/Unstage 当前 Hunk 在 unstaged 文件上,Hunk 加入 staged ;在 staged 文件上,Hunk 移回 unstaged
S Stage/Unstage 所有 Hunk 暂存或取消暂存当前文件的所有代码块
d Discard 当前 Hunk 丢弃当前代码块的修改(有确认提示)
D 强制 Discard 当前 Hunk 丢弃当前代码块的修改(无确认提示,慎用)
]c 下一个 Hunk 跳转到下一个代码块
[c 上一个 Hunk 跳转到上一个代码块

更多快捷键介绍: | 快捷键 | 功能 | 说明 | |--------|------|------| | < | 返回导航面板 | 若导航面板已关闭,则重新打开并将光标定位到 Diff View 对应的文件上 | | Enter | 跳到对应的文件 | 跳到对应的文件进行编辑操作 |

如需自定义快捷键,可在 .vimrc 中修改下面配置:

let g:Lf_GitKeyMap = {
            \ 'previous_change': '[c',
            \ 'next_change': ']c',
            \ 'edit_file': '<CR>',
            \ 'open_navigation': '<',
            \ 'stage_unstage_hunk': 's',
            \ 'stage_unstage_all_hunk': 'S',
            \ 'discard_hunk': 'd',
            \ 'discard_hunk_no_prompt': 'D',
            \ }

提交更改

在导航面板中,若已暂存需提交的更改:

  1. c 开始提交流程
  2. 系统将打开新窗口,供你填写提交信息
  3. 输入提交信息后,保存并关闭窗口
  4. 提交完成,更改已被记录到 Git 历史中
  5. 若想取消提交,清空消息并关闭窗口即可

实际工作流程示例

以下通过一个典型场景演示完整操作流程:

场景:修复 Bug 并添加新功能

  1. 查看当前状态

    :Leaderf git status
    
  2. 分析修改

    • 打开 bug_fix.py 查看具体修改
    • 使用 ]c 浏览所有代码块
    • 发现两处独立修改:一处为 Bug 修复,另一处为调试语句
  3. 选择性暂存

    • 在 Bug 修复的代码块上按 s 暂存
    • 调试语句保持未暂存状态
  4. 处理新功能文件

    • < 返回导航面板
    • 打开 new_feature.py进行 review
    • S 暂存所有代码块(新功能的修改应一并提交)
  5. 提交更改

    • 返回导航面板
    • c 开始提交
    • 输入提交信息:"修复用户登录验证问题并添加搜索功能"
    • 保存并关闭提交信息窗口

整个流程均在 Vim 内完成,无需切换上下文,保持流畅的编码体验。

为何这种方式更高效?

与传统命令行对比

操作 命令行 LeaderF
查看状态 git status(纯文本) 可视化文件树,直观清晰
分块提交 git add -p(交互问答) 直接按 s 选择暂存块
丢弃修改 git restore <file>git checkout -- <file> 一键 dD
跳转改动 需肉眼查找 ]c / [c 快速定位变更块

总结

通过 Leaderf git status,你可在 Vim 中获得一套高效、直观的 Git 工作流:

  1. 可视化查看 Git 状态
  2. 文件级暂存/取消暂存
  3. 代码块( hunk )级精细控制
  4. 快速丢弃修改
  5. 一站式提交代码

全程无需离开 Vim

配置示例

" 设置全局快捷键
nnoremap <leader>gs :<C-U>Leaderf git status<CR>