
Lazygit 按键绑定完全指南从自动生成速查表到可定制键位配置【免费下载链接】lazygitsimple terminal UI for git commands项目地址: https://gitcode.com/GitHub_Trending/la/lazygit本文围绕 Lazygit 仓库中自动生成的按键绑定速查表Keybindings_ru.md同系列还有英、日、韩、中等多语言版本展开完整覆盖全局、主面板、提交、分支、文件、暂存区等全部上下文的键位清单并结合 cheatsheet 生成器、Binding 结构定义 与 键位配置结构 的源码讲清楚这份速查表是如何从代码自动产出的、每个按键如何映射到具体动作以及如何按官方语法自定义自己的键位。速查表的来源一份由代码生成的文档打开 Keybindings_ru.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/cheatsheet/generate.go 中核心链路可以概括为三步实例化 GUI 并收集绑定Generate()对每种受支持的语言加载对应翻译集后调用mApp.Gui.GetCheatsheetKeybindings()。该方法在 pkg/gui/keybindings.go 中实现——它会重建全部视图与上下文树再调用GetInitialKeybindings()从而把运行时真实注册的按键而不是文档里手写的清单导出出来。按上下文分组getBindingSections把每条绑定按视图名如commits、files、staging归组并借助localisedTitle映射把视图名翻译成各语言的章节标题Tag navigation的绑定翻页、跳顶/跳底等单独归入“列表导航”一节。渲染成 Markdown 表格formatSections按| Key | Action | Info |三列输出其中键位用双反引号包裹管道符自动转义多行提示词中的换行替换为br。这套机制保证了速查表与实现永不脱节你在?菜单里看到的键位、屏幕底部显示的键位提示、以及这份文档来自同一份Binding注册数据。键位语法速览书写自定义配置时必须知道的形式速查表里的键位写法如ctrlr、W, ctrle正是 Lazygit 官方键位语法完整规则见 Custom_Keybindings.md单个可打印字符q、?、5。大写字母表示 Shift字母——写A而不是shifta尖括号包裹的特殊键名enter、f1、up带修饰键的组合ctrlc、ctrlshiftup字面量disabled禁用某个默认绑定以上形式的列表quit: [q, ctrlc]表示多个键触发同一动作。修饰键前缀前缀缩写含义ctrlcCtrlaltaAltshiftsShiftmetam取决于终端macOS 上通常是 ⌘其他系统为 Super/Win修饰键可用或-连接、顺序任意、长短形式可混用例如ctrlshiftup、csup、ctrl-shift-up表达的是同一个绑定。特殊键名包括f1–f12、insert、delete、home、end、pgup、pgdown、up/down/left/right、tab、backtab、enter、esc、backspace、space、mouse wheel up/mouse wheel down均可再叠加修饰键。minus/plus是-与搭配修饰键时的写法无修饰键时直接写-、。两类看似合理但会被拒绝的组合shifta终端会把 Shift 折叠进字符本身直接写ActrlA这类“修饰键 大写字母”应写ctrlshifta。需要注意的终端兼容性前提纯字母与 ctrl字母之外的组合依赖较新的终端协议Ghostty、kitty、WezTerm、foot、Konsole、Alacritty、iTerm2、Windows Terminal 支持良好macOS 自带 Terminal.app 与 Git for Windows 的 MinTTY 不支持。在 tmux 3.2 中需开启set -g extended-keys on与set -as terminal-features xterm*:extkeys才能透传扩展按键。在源码侧单个键位值的解析由 pkg/config/keybinding.go 中的Keybinding类型完成它在 YAML 反序列化时兼容“单个字符串”和“字符串序列”两种写法并会在解析阶段就过滤掉空串与disabled使上层无需特判而 pkg/config/keynames.go 的GetValidatedKeyBindingKeys负责把配置里的键位字符串校验并转换成实际的按键对象——这就是为什么在 pkg/gui/keybindings.go 中每条绑定的键位都通过opts.GetKeys(opts.Config.Universal.Xxx)读取最终做到“改配置即改键位”。全局键位无论焦点在哪个面板都生效的键位ViewName为空的绑定键位动作说明ctrlr切换到最近的仓库pgup, K, ctrlufnup/shiftk向上滚动主面板pgdown, J, ctrldfndown/shiftj向下滚动主面板打开命令日志菜单查看/隐藏命令日志、聚焦日志面板等选项。P推送Push推送当前分支到其上游分支未配置上游时会提示配置。p拉取Pull从远端拉取当前分支的变更未配置上游时会提示配置。)提高重命名相似度阈值提高“删除新增”对被识别为重命名的相似度阈值默认值可用配置键git.renameSimilarityThreshold修改。(降低重命名相似度阈值同上方向相反。}增大 diff 上下文行数增大 diff 视图中变更周围的上下文数量默认值可用git.diffContextSize修改。{减小 diff 上下文行数同上方向相反。:执行 shell 命令弹出提示框输入要执行的 shell 命令。ctrlp查看自定义补丁选项m查看合并/变基选项中止/继续/跳过当前 merge/rebase。R刷新后台重新执行git status、git branch等以刷新面板内容注意不会执行git fetch。下一个屏幕模式普通/半屏/全屏_上一个屏幕模式\|切换 diff 渲染器正向依次选择已配置的 diff 渲染器。\切换 diff 渲染器反向esc取消?打开菜单ctrls查看过滤选项过滤提交日志只显示匹配过滤条件的提交。W, ctrle打开 diff 对比菜单对比两个 ref、选择对比的 ref、反转 diff 方向等。q, ctrlc退出ctrlz挂起应用ctrlw切换 diff 视图中的空白显示默认值可用git.ignoreWhitespaceInDiffView修改。altshiftc编辑配置文件在外部编辑器中打开。z撤销基于 reflog实验性利用 reflog 判断应执行哪条 git 命令来撤销上一条 git 命令不涉及工作区改动只考虑提交。Z重做基于 reflog实验性同上方向为重复上一条命令。列表面板导航这类绑定的Tag为navigation会被生成器归入独立章节键位动作,上一页.下一页、home跳到顶部、end跳到底部v切换范围拖拽选择shiftdown向下扩展范围选择shiftup向上扩展范围选择/查找H向左滚动L向右滚动]下一个标签页[上一个标签页提示框、菜单与确认面板上下文键位动作输入提示框enter确认输入提示框esc关闭/取消菜单enter执行菜单esc关闭/取消菜单/按文本过滤当前视图确认面板enter确认确认面板esc关闭/取消确认面板ctrlo复制到剪贴板主面板暂存视图聚焦暂存staging视图时的键位键位动作说明left, h选择上一个块right, l选择下一个块v切换范围拖拽选择a切换 hunk 选择模式在逐行选择与按 hunk 选择之间切换。ctrlo复制选中内容到剪贴板space切换暂存状态将选中行在已暂存/未暂存之间切换。d丢弃变更git reset选中未暂存变更时用git reset丢弃选中已暂存变更时取消暂存。o打开文件用默认程序打开。e编辑文件在外部编辑器中打开。esc返回文件面板tab切换到另一面板已暂存/未暂存E编辑这个 hunk在外部编辑器中编辑选中的 hunk。c提交变更提交已暂存的变更。w提交跳过 pre-commit 钩子C用 git 编辑器提交ctrlf查找 fixup 基准提交找到当前变更所基于的提交省去逐条翻找详见 Fixup_Commits.md。/查找主面板普通视图 / 合并冲突 / 补丁构建普通视图main键位动作mouse wheel downfnup向下滚动mouse wheel upfndown向上滚动tab切换到另一面板已暂存/未暂存esc返回侧边面板/查找合并冲突mergeConflicts键位动作space选择这个 hunkb同时选择两侧 hunkup, k选择上一个 hunkdown, j选择下一个 hunkleft, h选择上一个冲突right, l选择下一个冲突z撤销e在外部编辑器中编辑文件o用默认程序打开文件M查看合并冲突解决选项esc返回文件面板补丁构建patchBuilding键位动作说明left, h选择上一个块right, l选择下一个块v切换范围拖拽选择a切换 hunk 选择模式逐行与按 hunk 切换。ctrlo复制选中内容到剪贴板o打开文件e编辑文件space添加/移除补丁中的行d从提交中移除行后台执行交互式变基若后续提交也修改了这些行可能产生冲突。esc退出自定义补丁构建/查找提交类上下文本地提交 / Reflog / 子提交本地提交commits键位动作说明ctrlo复制短哈希到剪贴板ctrlr重置已复制cherry-pick的提交选择b查看 bisect 选项sSquash压缩提交将选中提交压缩进下方提交其消息追加到下方提交。fFixup同 Squash但丢弃选中提交的消息。c设置 fixup 消息设置 fixup 提交的消息选项-C表示改用本提交的消息。r重写reword提交R用编辑器重写提交d删除提交通过变基将该提交移出分支若后续提交依赖其改动可能需要解决冲突。e编辑开始交互式变基i开始交互式变基针对分支上的提交范围从 HEAD 到第一个合并提交或主分支提交若要从选中提交开始变基按e。pPick变基进行中F创建 fixup 提交为这个提交创建 fixup。S应用 fixup 提交autosquash将上方所有fixup!提交合并进选中提交。ctrlj, altdown下移提交一位ctrlk, altup上移提交一位V粘贴cherry-pick已复制提交B标记为变基基准提交使用git rebase --onto仅迁移基准提交之上的提交。AAmend用已暂存变更修正最后一个提交。a设置/清除提交作者设置作者或共同作者co-author。tRevert为选中提交创建反向提交的 revert 提交。T为提交打标签输入标签名与可选描述。ctrll打开日志菜单更改排序、隐藏/显示完整 git 图等。G在浏览器中打开 Pull Requestspace切换检出以 detached HEAD 检出租选提交。y复制提交属性哈希、URL、diff、消息、作者等。o在浏览器中打开提交n从此提交新建分支N移动提交到新分支新建分支并把当前分支未推送的提交移过去新分支始终从主分支分出或堆叠在当前分支之上可选。w新建 worktreeg查看重置选项soft/mixed/hard 重置到选中项。C复制cherry-pick标记为已复制在本地提交视图中按V粘贴esc取消。ctrlt打开外部 diff 工具git difftool*选择当前分支的所有提交0聚焦主视图enter查看该项目的文件/查找Reflog 提交reflogCommits与子提交subCommits两者的键位集合与本地提交高度重叠复制哈希、复制/粘贴 cherry-pick、新建分支、New worktree、重置选项、difftool、选中当前分支提交、聚焦主视图、enter进入、/查找等差异在于space同样表示以 detached HEAD 检出选中提交子提交上下文用于查看某个提交的父提交链。分支与远端本地分支localBranches键位动作说明ctrlo复制分支名到剪贴板i显示 git-flow 选项space切换检出选中项。n新建分支N移动提交到新分支同上把未推送提交移到新分支。w新建 worktreeo创建 Pull RequestO查看 PR 创建选项G在浏览器中打开 PRctrly复制 PR URL 到剪贴板c按名称检出输入框中键入-可切回上一个分支。-检出上一个分支F强制切换丢弃工作区所有本地变更后再检出。d删除查看本地/远端分支删除选项。r将当前分支变基到该分支M合并到当前分支常规 merge 或 squash merge。f快进该分支从其上游快进选中分支。T新建标签s切换排序方式g查看重置选项R重命名分支u查看上游选项设置/取消上游、重置到上游等。ctrlt打开外部 diff 工具0聚焦主视图enter查看提交/按文本过滤远端分支remoteBranches键位动作说明ctrlo复制分支名到剪贴板space切换基于选中远端分支新建本地分支或以 detached HEAD 检出。n新建分支w新建 worktreeM合并到当前分支r将当前分支变基到该分支d删除从远端删除该远端分支。u设为上游设为当前分支的 upstream。s切换排序方式g查看重置选项ctrlt打开外部 diff 工具0聚焦主视图enter查看提交/按文本过滤远端仓库remotes键位动作说明enter查看分支n添加新远端d删除跟踪该远端分支的本地分支不受影响。e编辑f拉取从该远端 fetch。F添加 fork 远端替换 origin URL 中的 owner 快速添加 fork并可检出其分支。/按文本过滤标签tags键位动作说明ctrlo复制标签到剪贴板space切换以 detached HEAD 检出选中标签。n新建标签从当前提交创建输入名称与可选描述。w新建 worktreed删除查看本地/远端标签删除选项。P推送标签推送到远端需选择远端。g重置soft/mixed/hard 选项。ctrlt打开外部 diff 工具0聚焦主视图enter查看提交/按文本过滤文件、提交文件与状态面板文件files键位动作说明ctrlo复制文件路径到剪贴板space切换暂存切换选中文件的 staged 状态。ctrlb过滤文件staged/unstagedy复制到剪贴板c提交变更提交已暂存变更。w提交跳过 pre-commit 钩子AAmend 最后一个提交C用 git 编辑器提交ctrlf查找 fixup 基准提交见上文说明与 Fixup_Commits.md。e编辑外部编辑器打开。o打开文件默认程序打开。i忽略或排除文件r刷新文件sStash贮藏全部变更更多变体用 stash 选项菜单。S查看 stash 选项全部/staged/unstaged 等。a全部暂存/取消暂存对工作区所有文件。enter进入文件暂存视图或折叠/展开目录文件则聚焦 staging 视图可逐 hunk/行暂存目录则折叠展开。d查看丢弃选项g查看上游重置选项D重置工作区重置选项如清空工作区。切换文件树/扁平视图默认值可用gui.showFileTree修改。ctrlt打开外部 diff 工具M查看合并冲突选项f获取远端变更fetch。-折叠所有目录展开所有目录0聚焦主视图/按文本过滤提交文件commitFiles键位动作说明ctrlo复制文件路径到剪贴板y复制到剪贴板c切换文件d查看丢弃选项丢弃该提交在此文件中的变更。o打开文件e编辑外部编辑器。ctrlt打开外部 diff 工具space切换文件是否纳入自定义补丁属于 rebase magic / custom patches 功能。a切换全部文件纳入补丁enter进入文件逐行加入/移除补丁或切换目录切换文件树/扁平视图-折叠全部展开全部0聚焦主视图/按文本过滤状态面板status仓库选择界面键位动作e编辑配置文件u检查更新enter切换到最近仓库a显示/切换全部分支图A显示/切换全部分支图反向0聚焦主视图提交摘要commitMessageenter确认esc关闭。暂存区Stash、Worktrees 与子模块暂存区stash键位动作说明space应用 stash应用到工作区。g应用并删除apply 后从 stash 列表移除。d删除 stash 条目n新建分支从 stash 条目创建分支检出该条目基于的提交、建分支、再把 stash 作为新提交应用上去。w新建 worktreer重命名 stash0聚焦主视图enter查看该项的文件/按文本过滤Worktrees键位动作说明n新建 worktreespace切换切换到选中 worktree。o在编辑器中打开d删除同时删除目录与 .git 中的元数据。/按文本过滤子模块submodules键位动作ctrlo复制子模块名到剪贴板enter进入d删除子模块及其目录u更新子模块n添加新子模块e更新子模块 URLi初始化b查看批量子模块选项/按文本过滤从按键到动作源码中的绑定机制速查表中的每一行都对应一条 Binding 结构其字段设计值得注意ViewName决定作用域为空表示全局键位非空则仅在该视图获得焦点时生效——这解释了为什么同一按键如d在不同上下文执行完全不同的动作删除提交/丢弃变更/删除 stash 条目/删除 worktree。Keys是按键数组与配置中“一个动作可绑定多个键”的写法对应SetKeybinding会为每个键单独注册处理器。Description/ShortDescription/Tooltip分别服务于 cheatsheet 文档生成、屏幕底部键位提示、以及菜单中的悬停提示——三处文案共用同一注册点保证一致。GetDisabledReason返回非空时该键位被禁用按下去会看到错误提示而不是误操作。注册流程见 pkg/gui/keybindings.goGetInitialKeybindings先注册全局绑定仓库切换、滚动、各视图的复制哈希/路径等再遍历gui.State.Contexts.Flatten()的每个上下文收集其GetKeybindings最后叠加自定义命令custom commands注入的键位——源码注释明确说明自定义键位被前置到列表以获得相对默认键位的优先权。按键分发时callKeybindingHandler会先检查禁用原因再调用具体Handler而像NoPopupPanel、OutsideFilterMode这样的“守卫”定义于 pkg/gui/types/keybindings.go 的Guard会在执行前拦截例如过滤模式下触发某些全局操作会先弹出“必须退出过滤模式”的确认框。小结这份速查表的价值在于三点其一它是运行时真实键位的快照由 pkg/cheatsheet/generate.go 从GetCheatsheetKeybindings自动导出与?菜单、底部提示同源多语言版本如 Keybindings_en.md、Keybindings_zh-CN.md由同一份数据渲染其二速查表中每个Key的写法即官方配置语法配合 Custom_Keybindings.md 可直接迁移到自己的 YAML 配置结构定义见 pkg/config/user_config.go 的KeybindingConfig及其各子结构其三键位的作用域规则全局/按视图在 pkg/gui/keybindings.go 的注册逻辑中有清晰的代码印证。当你需要“某个操作到底按什么键、这个键在哪个面板生效”时先查本速查表定位上下文再到对应配置子结构中查键名即可准确完成自定义与排错。【免费下载链接】lazygitsimple terminal UI for git commands项目地址: https://gitcode.com/GitHub_Trending/la/lazygit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考