Lazygit 键位完全指南:从 Keybindings_pl.md 拆解全局快捷键、分屏操作与自定义绑定原理

📅 发布时间:2026/9/5 20:45:08
Lazygit 键位完全指南:从 Keybindings_pl.md 拆解全局快捷键、分屏操作与自定义绑定原理
Lazygit 键位完全指南从 Keybindings_pl.md 拆解全局快捷键、分屏操作与自定义绑定原理【免费下载链接】lazygitsimple terminal UI for git commands项目地址: https://gitcode.com/GitHub_Trending/la/lazygitLazygitsimple terminal UI for git commands通过一套分场景的快捷键体系驱动整个 TUI 界面。本文以仓库中波兰语键位文档 Keybindings_pl.md 为主体完整继承其 20 余个快捷键分节与全部关键条目并结合 pkg/config/keybinding.go、pkg/config/keynames.go 等源码讲清每个键位背后的解析规则、可配置项以及自定义绑定的语法边界。读完本文你可以熟练覆盖 lazygit 中从提交管理、暂存 staging 到 rebase 冲突处理的全部常用操作并能在用户配置中安全地改写或禁用任意键位。文档定位一份自动生成的权威键位清单Keybindings_pl.md 文件开头即声明This file is auto-generated. To update, make the changes in the pkg/i18n directory and then rungo generate ./...from the project root.也就是说所有快捷键文案的唯一事实源在 pkg/i18n 目录英文原文维护于 pkg/i18n/english.go各语言 JSON 是机器生成的见 pkg/i18n/translations/README.md而docs/keybindings/下的各语言 Markdown 由 pkg/cheatsheet/generator.go 驱动生成。这带来两个实用结论键位表与程序实际注册的行为严格一致可直接当作操作手册使用无需再去翻源码确认某个键的作用表格里个别条目仍是英文如Select commits of current branch属于翻译进度问题含义以 Keybindings_en.md 为准。文档按上下文context组织同一按键在不同面板commits、files、branches……执行不同动作这正是 lazygit 的context controller架构在 UI 上的映射见 pkg/gui/context 与 pkg/gui/controllers。下面逐节继承原文档内容。全局快捷键Globalne skróty klawiszowe在任何面板都生效的键位是最高频的一组。完整继承原文档表格KeyAction说明ctrlr切换到最近仓库pgup, K, ctrlu (fnup/shiftk)主窗口向上滚动pgdown, J, ctrld (fndown/shiftj)主窗口向下滚动命令日志选项显示/隐藏命令日志面板并聚焦。PPush将当前分支推送到其上游未配置上游时会提示配置。pPull从远端拉取当前分支的更新未配置上游时同样会提示。)/(增大/减小 rename similarity 阈值调整判定删除新增重命名的相似度阈值默认值可用配置键git.renameSimilarityThreshold修改。}/{增大/减小 diff 上下文行数默认值可用配置键git.diffContextSize修改。:在 shell 中执行命令打开 shell 命令输入提示框。ctrlp自定义补丁选项m合并/rebase 选项中断/继续/跳过当前 merge 或 rebase。R刷新后台运行git status、git branch等以更新面板不会触发git fetch。/_下一个/上一个屏幕模式normal/half/full 三档切换。\|/\切换 diff 渲染器正/反向在配置的 diff renderers 列表中循环。esc取消?打开键位菜单ctrls过滤选项仅显示匹配过滤器的提交。W, ctrlediff 选项选择两个 ref 做 diff、反转 diff 方向等。q, ctrlc退出ctrlz挂起应用ctrlw切换空白字符显示默认值可用git.ignoreWhitespaceInDiffView修改。altshiftc编辑配置文件用外部编辑器打开。z撤销undo借助 reflog 推断应执行的 git 命令来撤销上一个 git 命令只考虑提交不考虑工作区变更。Z重做redo同理重做上一次 git 命令。其中z/Z的撤销能力依赖 reflog可在仓库文档 docs/Undoing.md 中找到设计说明B键触发的 fixup base commit 查找逻辑同样有专门设计文档 docs/Find_Base_Commit_For_Fixup_Design.md 级别的配套说明。列表导航Nawigacja panelu listy所有侧边列表分支、远端分支、标签、stash 等共享这套导航键KeyAction,/.上一页 / 下一页, home/, end滚到顶 / 滚到底v切换范围选择shiftdown/shiftup向下/向上扩展范围选择/在当前视图按文本搜索H/L向左 / 向右滚动]/[下一个 / 上一个标签页tab范围选择range select配合 cherry-pick 的复制/粘贴C/V使用价值很高详见 docs/Range_Select.md/触发的是全文搜索提示框行为说明见 docs/Searching.md。提交面板Commity这是全文档最长、也是日常使用最密集的一节。逐条继承如下KeyAction说明ctrlo复制缩略 commit hash 到剪贴板ctrlr重置到所选cherry-picked提交b二分查找选项sSquash把所选提交压入其下方提交所选提交的 message 追加到下方提交。fFixup把所选提交压入下方提交但丢弃所选提交的 message。c设置 fixup message为 fixup 提交设置-C选项复用该提交自身的 message。r/R改写 message / 用编辑器改写d删除提交通过 rebase 将其从分支移除若后续提交依赖其改动可能产生冲突。eEdit开始交互式 rebase从所选提交开始交互式 rebaserebase 暂停时会标记该提交为 edit。i开始交互式 rebase覆盖从 HEAD 到第一个 merge commit 或主干分支之间的所有提交只想从某个提交开始按e。pPickrebase 进行中时标记所选提交为保留。F创建 fixup 提交为所选提交生成fixup!提交之后按S一次性应用所有 fixup。S应用 fixup 提交autosquash合并所选提交上方或整条分支上的所有fixup!提交。ctrlj, altdown/ctrlk, altup下移 / 上移提交V粘贴cherry-pickB标记 rebase 基准提交下次 rebase 时只迁移基准提交以上的提交底层用git rebase --onto。AAmend用暂存区改动修正所选提交若为 HEAD 则直接git commit --amend否则通过 rebase 实现。a修正提交属性设置/重置作者或合著者。tRevert为所选提交生成反向内容的 revert 提交。T打标签在所选提交上创建新 tag。ctrll日志选项改变排序、隐藏/显示 git graph 等。G在浏览器中打开 PRspace切换将所选提交切换为 detached HEAD。y复制提交属性可选 hash、URL、diff、message、author 等。o在浏览器中打开提交n从提交创建新分支N迁移提交到新分支新建分支并把当前分支未推送的提交移过去适合忘记先建分支的场景可基于主干或叠加在当前分支之上二选一。w新建 worktreegReset显示 soft/mixed/hard 三种 reset 选项。C复制cherry-pick标记提交为已复制之后按V粘贴esc随时取消。ctrlt打开 git difftool*选择当前分支的所有提交0聚焦主视图enter查看提交文件/搜索fixup/squash 工作流的完整用法参见 docs/Fixup_Commits.mdB键标记基准提交的设计背景见 docs/Find_Base_Commit_For_Fixup_Design.md。主面板暂存视图Panel główny, zatwierdzanie在 Files 面板选中文件按enter进入的主视图键位随模式变化。暂存staging模式KeyAction说明left, h/right, l上一个 / 下一个 hunkv切换范围选择a切换 hunk 选择粒度逐行选择与整 hunk 选择之间切换。ctrlo复制选中文本space暂存切换所选 hunk/行的 staged/unstaged 状态。d丢弃对未暂存改动执行git reset丢弃对已暂存改动则取消暂存。o/e用默认应用打开 / 用外部编辑器打开esc回到文件面板tab切换视图在 staged/unstaged 视图间切换。E编辑 hunk在外部编辑器中修改所选 hunk。cCommit提交已暂存改动。w提交跳过 pre-commit hookC用 git 编辑器提交ctrlf查找 fixup 基准提交定位当前改动基于哪个提交避免逐个浏览分支历史见 docs/Fixup_Commits.md。/搜索合并冲突解决模式Panel główny, scalanie则换用另一套键space选择 hunk、b同时保留双方 hunk、up, k/down, j上下 hunk、left, h/right, l切换冲突文件、z撤销上一次冲突解决、e/o编辑器/默认应用打开、M冲突选项、esc回到文件面板。自定义补丁构建模式Główny panel, budowanie łatki与暂存视图共享h/l/v/a/ctrlo/o/e//的布局差异在于space表示在补丁中切换该行、d表示从该提交中移除所选行后台跑交互式 rebase后续提交若改同一行会触发冲突、esc退出补丁构建器。文件面板PlikiKeyAction说明ctrlo复制文件路径space暂存切换所选文件的暂存状态。ctrlb按状态过滤文件y复制到剪贴板c/w/CCommit / 跳过 hook 提交 / 用 git 编辑器提交A修正最后一个提交ctrlf查找 fixup 基准提交同上。e/o外部编辑器打开 / 默认应用打开i忽略或排除文件r刷新文件列表s/SStash / Stash 选项直接s藏全部S提供藏全部/只藏已暂存/只藏未暂存。a暂存全部切换整个工作区的暂存/取消暂存。enter暂存行 / 折叠目录文件则进入暂存视图目录则折叠/展开。d丢弃显示丢弃所选文件改动的选项。g重置到 upstream 选项DReset工作区 reset 选项包括销毁工作区。切换文件树视图flat 与 tree 布局互切默认值由gui.showFileTree控制。ctrlt打开 git difftoolM冲突解决选项fFetch-/全部折叠 / 全部展开目录0聚焦主视图/过滤分支、远端、标签、Stash 等侧边面板本地分支Lokalne gałęziectrlo复制分支名space切换分支n/N新分支/迁移提交到新分支w新 worktreeo/O创建 PR/查看 PR 选项G打开 PRctrly复制 PR URLc按名切换输入-可回到上一个分支-切换到上一个分支F强制切换丢弃本地改动d删除rrebase 到所选分支M合并所选分支到当前分支ffast-forwardT新标签s排序gresetR重命名分支u上游选项设置/删除/重置到上游ctrltdifftool0聚焦主视图enter查看提交/过滤i显示 git-flow 选项。远端分支Zdalne gałęziectrlo复制分支名space基于远端分支创建并切换本地跟踪分支n/w新分支/新 worktreeM合并rrebased删除远端分支u设为上游s排序gresetctrltdifftoolenter查看提交/过滤。远端Zdalneenter查看其分支n新建远端d删除远端不影响本地跟踪分支e编辑名称/URLffetchF添加 fork 远端替换 origin URL 中的 owner可选检出该远端分支/过滤。标签Tagictrlo复制 tag 名space切换为 detached HEADn新标签w新 worktreed删除本地/远端选项P推送所选 tag会提示选择远端gresetctrltdifftoolenter查看提交/过滤。StashSchowekspace应用所选 stash 到工作区gpop应用并删除d删除条目n从 stash 条目创建新分支切到 stash 创建时的提交 → 建分支 → 作为额外提交应用 stashw新 worktreer重命名 stashenter查看文件/过滤。WorktreeDrzewa pracyn新建space切换到所选 worktreeo在编辑器中打开d删除同时删除目录与.git内元数据/过滤。ReflogDziennik reflog与Sub-commity两个面板复用提交操作集space切换为 detached HEAD、y复制属性、o浏览器打开、n/N建分支、w新 worktree、greset、C/V复制/粘贴 cherry-pick、ctrlr重置到所选提交、ctrltdifftool、*选择当前分支提交、enter查看提交/文件、/搜索。子模块Submodułyctrlo复制子模块名enter进入子模块esc返回父仓库d删除子模块及其目录u更新n新建e更新 URLi初始化之后通常接u下载b批量操作选项/过滤。其他小面板输入提示框Input prompt只有enter确认、esc关闭/取消确认面板Panel potwierdzenia另加ctrlo复制内容状态栏Status提供e编辑配置文件、u检查更新、enter切换到最近仓库、a/A显示/循环所有分支日志、0聚焦主视图提交信息面板Podsumowanie commita为enter确认、esc关闭主视图默认模式Panel główny, normalny提供鼠标滚轮上下滚动、tab切换视图、esc回到侧边面板、/搜索。自定义键位语法、源码解析与校验规则原文档所有键位都可以改写。官方语法参考是 docs/keybindings/Custom_Keybindings.md而真正实现解析的是 pkg/config/keybinding.go 与 pkg/config/keynames.go。键位值的书写形式一个键位可以是单个可打印字符如q、?、5。大写字母即 shift字母写A而不是shifta尖括号包裹的特殊键名如enter、f1、up带修饰键的组合如ctrlc、ctrlshiftup字面量disabled表示禁用该绑定以上任意值的列表把多个键绑到同一动作quit: [q, ctrlc]。特殊键名对照摘自 Custom_Keybindings.md与 pkg/config/keynames.go 中labelByKey表逐项对应f1–f12、insert、delete、home、end、pgup、pgdown、up、down、left、right、tab、backtab、enter、esc、backspace、space、mouse wheel up、mouse wheel down均可再叠加修饰键如ctrlup、altenter。修饰键前缀支持长短两种写法且可混用、可乱序ctrl/c、alt/a、shift/s、meta/m分隔符可用或-。因此ctrlshiftup、csup、ctrl-shift-up等价。minus与plus是-和在带修饰键时的关键字形式无修饰键时直接写-、。源码中的解析与校验逻辑配置层的Keybinding类型定义在 pkg/config/keybinding.gotype Keybinding []string func (k *Keybinding) UnmarshalYAML(node *yaml.Node) error { var ss []string switch node.Kind { case yaml.ScalarNode: // 单键q var s string if err : node.Decode(s); err ! nil { return err } ss []string{s} case yaml.SequenceNode: // 多键[q, ctrlc] if err : node.Decode(ss); err ! nil { return err } default: return fmt.Errorf(expected a string or a sequence of strings for keybinding, got %v, node.Tag) } // 丢弃空串与 disabled客户端无需特判 *k lo.Filter(ss, func(s string, _ int) bool { return s ! s ! disabled }) return nil }这段实现解释了三个行为YAML 里既写字符串又写数组都能通过disabled在反序列化阶段就被过滤掉所以禁用等价于空列表旧版*Alt*字段会经mergeLegacyAlt合并进主字段同文件 L90-L92老配置可以平滑升级。真正把标签解析成可匹配按键的是 pkg/config/keynames.go 的KeyFromLabel其中两处看似合理但必须拒绝的组合值得注意裸 rune 上的单独 shift 非法shifta不会生效因为终端会把 shift 折叠进字符本身——shifta 到达程序时就是A。源码注释明确说明应写AL174-L180。大写 ASCII 字母不能带修饰键ctrlA、altA均非法因为 ctrl 码不分大小写ctrla 与 ctrlA 发送同一字节CSI-u 协议也以上报未 shift 码点加 shift 修饰的方式表达应写ctrlshiftaL182-L190。运行时方向由LabelForKey同文件 L50-L93负责把gocui.Key还原为ctrlshiftf1这类人类可读标签供?菜单显示配置校验失败时GetValidatedKeyBindingKey会直接log.Fatalf并提示这应当被用户配置校验捕获L200-L207即非法键位会在启动阶段而非运行中途暴露。终端兼容性的现实约束Custom_Keybindings.md 特别指出组合修饰键依赖较新的终端协议并非所有终端都支持。文档列举的已知良好支持终端包括 Ghostty、kitty、WezTerm、foot、Konsole、Alacritty、iTerm2、Windows TerminalmacOS 自带的 Terminal.app 与 Git for Windows 的 MinTTY 不支持。在 tmux/screen 中扩展键位除非多路复用器配置转发否则会被剥离tmux 3.2 需要set -g extended-keys on set -as terminal-features xterm*:extkeys这一点解释了为什么原文档表格中的fnup/shiftk这类替代标注存在——它们正是为不支持 CSI-u 协议的终端准备的降级方案。把键位落到你的配置文件中键位挂在用户配置的keybinding字段下结构体见 pkg/config/user_config.go 的KeybindingConfig字段注释同样指向 Custom_Keybindings.md 说明语法。一个最小示例覆盖本文出现过的三类典型改写keybinding: global: quit: [q, ctrlc] # 多键绑定原文默认即是 q 与 ctrlc refresh: R list: # 例如把范围选择改到别的键写成 disabled 可禁用 toggleRangeSelect: v status: checkForUpdate: disabled配合本文的键位表推荐的自定义工作流是在 lazygit 中按?打开键位菜单确认某个动作当前的绑定 → 对照上表找到对应contextglobal/list/commits/files/branches……即原文档的小节标题→ 在配置文件中以keybinding.context.action路径修改改完重启生效。由于Keybinding类型对单键与多键一视同仁任何原文档表格中带逗号分隔的按键如pgup, K, ctrlu在配置中都应写作列表形式[pgup, K, ctrlu]。小结Keybindings_pl.md 是一份由 i18n 文案自动生成的权威键位手册覆盖全局、列表导航、提交、文件、主视图staging/merge/patch-building、分支、远端、标签、stash、worktree、reflog、子模块等全部上下文与程序实际注册键位严格一致每个可改键位背后是 pkg/config/keybinding.go 的字符串/数组双形态解析 pkg/config/keynames.go 的标签-按键互转shift字母、ctrl大写字母这类组合在解析层被明确拒绝并有源码注释解释终端协议原因组合修饰键受终端协议限制弱协议终端应依赖J/K、fn方向键等替代键tmux 用户需开启 extended-keys 转发深度工作流文档可按需继续查阅Fixup_Commits.md、Range_Select.md、Undoing.md、docs/Config.md。【免费下载链接】lazygitsimple terminal UI for git commands项目地址: https://gitcode.com/GitHub_Trending/la/lazygit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考