lazydocker 快捷键权威指南:解读法语版 Keybindings 速查表与七类面板操作模型
【免费下载链接】lazydockerThe lazier way to manage everything docker项目地址: https://gitcode.com/GitHub_Trending/la/lazydocker
本篇指南围绕 lazydocker 仓库中的官方法语按键速查表 docs/keybindings/Keybindings_fr.md 展开,逐键讲解「项目 / 容器 / 服务 / 镜像 / 卷 / 网络」六大侧边面板、主面板(Main)与全局快捷键的完整映射,并回溯其背后的源码实现(pkg/gui/keybindings.go、pkg/i18n/french.go)与自动生成机制。读完本文,你将能直接在法语或任意语言界面的 lazydocker 中流畅操作 Docker Compose 项目,也能理解如何维护与再生成这类多语言速查文档。
文档是什么:一张由代码自动生成的按键速查表
Keybindings_fr.md的显著特征是文件头部注明This file is auto-generated——它并非手写文档,而是由仓库根目录下的生成脚本根据真实按键绑定声明逐条导出的产物。生成链路为:
- 所有界面绑定以
Binding结构集中定义在 pkg/gui/keybindings.go,每条绑定包含ViewName(所属面板)、Key、Handler(处理函数)与Description(国际化描述文案); - 描述文案取自 pkg/i18n/french.go 中定义的
TranslationSet; - scripts/cheatsheet/main.go 接受
generate/check两个子命令,调用 pkg/cheatsheet/generate.go 遍历i18n.GetTranslationSets()中的每种语言(fr即其中之一,见 pkg/i18n/i18n.go),逐条渲染<kbd>格式的输出,最终生成docs/keybindings/Keybindings_{{lang}}.md。
因此这张速查表与运行时真实快捷键是同一数据源,不会出现文档与实现脱节。若未来要修改法语按键或文案,正确做法是改动pkg/i18n/french.go(按键归属则改pkg/gui/keybindings.go),然后从项目根目录执行go run scripts/cheatsheet/main.go generate重新生成,而非直接编辑 Markdown。可对照同目录下 Keybindings_zh.md 观察不同语言在同一结构下的差异。
从Binding的定义可以推断一个补充机制(pkg/gui/keybindings.go):当ViewName为空字符串时表示全局生效;而当绑定没有Description时,生成脚本会在getBindingSections中将其过滤掉。这就是为什么源码里存在的部分按键(如q退出、PgUp/PgDn滚动主面板)并不会出现在速查表中——速查表只收录「带面向用户文案」的绑定,属于一份精简的操作指引而非完整清单。
界面模型:七类视图 + 全局
lazydocker 基于 gocui 构建,面板视图在 pkg/gui/views.go 的Views结构中集中声明:六个侧边面板(Project、Services、Containers、Images、Volumes、Networks)、一个主面板(Main),以及状态栏、过滤输入框、菜单/确认弹窗等辅助视图。面板的标题前缀([1]~[6])也在该文件中直接写死(如Project.TitlePrefix = "[1]"),与速查表 Global 区的数字快捷键一一对应。
速查表按Projet / Conteneurs / Services / Images / Volumes / Réseaux / Principal / Global八节组织,其中每个侧边面板都共享三条「通用」绑定:enter聚焦主面板、[上一个选项卡、]下一个选项卡、/过滤列表——它们由keybindings.go末尾的循环为所有侧边面板与列表面板统一注册,法语文案分别译为focus panneau principal / onglet précédent / onglet suivant / filter list。
项目(Projet)面板:配置与日志入口
| 按键 | 法语说明 | 含义 | 绑定的处理函数 |
|---|---|---|---|
e | modifier la configuration lazydocker | 用编辑器修改 lazydocker 配置 | handleEditConfig |
o | ouvrir la configuration lazydocker | 打开 lazydocker 配置 | handleOpenConfig |
m | voir les enregistrements | 查看全部日志 | handleViewAllLogs |
enter | focus panneau principal | 聚焦主面板 | handleEnterMain |
[ | onglet précédent | 上一个选项卡 | HandlePrevMainTab |
] | onglet suivant | 下一个选项卡 | HandleNextMainTab |
/ | filter list | 过滤列表 | handleOpenFilter |
「修改配置」与「打开配置」的区分在于:e会调用外部编辑器编辑配置文件,o则在主面板中展示配置内容(法语日志标题区还包含Config / Env / Docker-Compose Config等上下文选项卡,见 pkg/i18n/french.go 的标题定义)。项目面板仅在处于 Compose 项目目录时显示项目列表(其布局收缩/展开逻辑见 pkg/gui/arrangement.go)。
容器(Conteneurs)面板:全生命周期操作
容器面板拥有最丰富的操作集,覆盖从创建到销毁的完整生命周期:
| 按键 | 法语说明 | 含义 | 绑定的处理函数 |
|---|---|---|---|
d | supprimer | 删除容器(带确认菜单) | handleContainersRemoveMenu |
e | cacher/montrer les conteneurs arrêtés | 隐藏/显示已停止容器 | handleHideStoppedContainers |
p | pause | 暂停 | handleContainerPause |
s | arrêter | 停止 | handleContainerStop |
r | redémarrer | 重启 | handleContainerRestart |
a | attacher | 附加(attach) | handleContainerAttach |
m | voir les enregistrements | 查看日志 | handleContainerViewLogs |
E | exécuter le shell | 进入容器执行 shell | handleContainersExecShell |
c | exécuter une commande prédéfinie | 运行预定义自定义命令 | handleContainersCustomCommand |
b | voir les commandes groupées | 查看批量命令 | handleContainersBulkCommand |
w | ouvrir dans le navigateur (le premier port est http) | 在浏览器打开(首个端口按 HTTP) | handleContainersOpenInBrowserCommand |
注意此处大小写敏感的键位设计:e(显隐已停止容器)与E(执行 shell)语义完全不同,这与 services 面板的s/S、u/U、d/D、r/R遵循同一套「小写操作单体、大写操作项目或扩展菜单」的设计思路,在纯文本界面下利用大小写区分既省键位又易记忆。
配套的法语交互文案(如Vous ne pouvez pas supprimer un conteneur qui tourne sans le forcer——运行中的容器必须强制删除的确认提示,以及默认CTRL-PCTRL-Q脱离 attach 的提示)都定义在 pkg/i18n/french.go,说明法语翻译覆盖了界面确认弹窗层,而不仅是速查表文案。
服务(Services)面板:Compose 服务编排
服务面板把操作对象从「单个容器」提升到「Compose 服务」甚至「整个项目」:
| 按键 | 法语说明 | 含义 | 绑定的处理函数 |
|---|---|---|---|
u | up service | 启动服务(创建并启动容器) | handleServiceUp |
d | supprimer les conteneurs | 删除服务的容器 | handleServiceRemoveMenu |
s | arrêter | 停止 | handleServiceStop |
p | pause | 暂停 | handleServicePause |
r | redémarrer | 重启 | handleServiceRestart |
S | démarrer | 启动 | handleServiceStart |
a | attacher | 附加 | handleServiceAttach |
m | voir les enregistrements | 查看日志 | handleServiceRenderLogsToMain |
U | up project | 启动整个项目 | handleProjectUp |
D | down project | 停止并移除整个项目 | handleProjectDown |
R | voir les options de redémarrage | 查看重启选项菜单 | handleServiceRestartMenu |
c | exécuter une commande prédéfinie | 运行预定义命令 | handleServicesCustomCommand |
b | voir les commandes groupées | 查看批量命令 | handleServicesBulkCommand |
E | exécuter le shell | 执行 shell | handleServicesExecShell |
w | ouvrir dans le navigateur | 浏览器打开首端口 | handleServicesOpenInBrowserCommand |
这里u(up service)与U(up project)、d(删除该服务的容器)与D(down 整个项目)是典型的「同一语义、不同作用域」映射,R则会弹出包括重建(reconstruire/rebuild)在内的重启选项菜单。所有处理函数的实际挂载位置均可回查 pkg/gui/keybindings.go 中ViewName: "services"的分组。
镜像、卷与网络(Images / Volumes / Réseaux)面板:统一的三键模板
这三个面板的结构高度一致,各自只有三或四条差异化按键:
| 面板 | c(exécuter une commande prédéfinie,运行预定义命令) | d | b(voir les commandes groupées) |
|---|---|---|---|
| Images | 自定义命令 | supprimer l'image(删除镜像,handleImagesRemoveMenu) | 批量命令 |
| Volumes | 自定义命令 | supprimer le volume(删除卷,handleVolumesRemoveMenu) | 批量命令 |
| Réseaux | 自定义命令 | supprimer le réseau(删除网络,handleNetworksRemoveMenu) | 批量命令 |
再加上共享的enter/[/]//,三面板的速查表条目数几乎相同。它们的法语标题(Images / Volumes / Réseaux)及「无镜像/无卷/无网络」空态文案(Aucune image / Aucun volume / Aucun réseau)同样来自 pkg/i18n/french.go。镜像面板还可通过删除菜单联动法语翻译中的PruneImages / PruneVolumes / PruneNetworks等清理能力。
主面板(Principal)与全局(Global)快捷键
主面板区仅有一条按键:
| 按键 | 法语说明 | 含义 |
|---|---|---|
esc | retour | 返回(退出主面板,回到侧边面板) |
其实现为ViewName: "main"下的gui.handleExitMain。
全局区不受任何面板焦点约束,速查表列出六条:
| 按键 | 速查表说明(保留英文) | 含义 | 处理函数 |
|---|---|---|---|
+ | next screen mode (normal/half/fullscreen) | 下一屏幕模式(正常/半屏/全屏) | nextScreenMode |
_ | prev screen mode | 上一屏幕模式 | prevScreenMode |
1 | focus projects panel | 聚焦项目面板 | handleGoTo(...Projects...) |
2 | focus services panel | 聚焦服务面板 | handleGoTo(...Services...) |
3 | focus containers panel | 聚焦容器面板 | handleGoTo(...Containers...) |
4 | focus images panel | 聚焦镜像面板 | handleGoTo(...Images...) |
5 | focus volumes panel | 聚焦卷面板 | handleGoTo(...Volumes...) |
6 | focus networks panel | 聚焦网络面板 | handleGoTo(...Networks...) |
一个值得注意的细节是:Global 一节的说明在法语速查表中仍是英文(next screen mode等)。从源码看,这与法语翻译集有关——i18n会以英文baseSet为基础,再按系统语言前缀覆盖(合并逻辑见 pkg/i18n/i18n.go),而 French 翻译集(pkg/i18n/french.go)中尚未为LcNextScreenMode、LcPrevScreenMode、FocusProjects等全局项提供法语条目,因此回落到英文。这类「半翻译」状态恰好印证了速查表是翻译集的直接投影,翻译缺失会如实反映在生成的文档中。
屏幕模式的布局效果由 pkg/gui/arrangement.go 中的getMidSectionWeights计算:SCREEN_FULL时主面板占满、侧栏权重归零;SCREEN_HALF时主面板获得完整权重但仍保留侧栏。主面板内部的日志等长文本还支持方向键与PgUp/PgDn滚动、Home/End跳转顶部/自动跟随(定义在源码但未出现在速查表)。
速查表之外的源码级按键
由于生成脚本只收录带Description的绑定,以下高频操作并未出现在Keybindings_fr.md中,但属于真实可用的全局/上下文按键(依据 pkg/gui/keybindings.go):
- 退出与返回:
q、Ctrl-C全局退出;esc全局执行escape回退。 - 滚动:
PgUp/PgDn、Ctrl-U/Ctrl-D上下滚动主面板;J/K/H/L全局滚动主面板四个方向;主面板内亦可用方向键。 - 面板间移动:方向键
←/→、h/l、Tab/Shift-Tab(Backtab)在所有侧边面板间前后切换焦点。 - 列表上下移动:
k/j、↑/↓及鼠标滚轮,在焦点列表内移动行并支持鼠标点击(setUpDownClickBindings统一为所有列表面板注册)。 - 帮助与命令:
x或?打开选项菜单,X触发自定义命令。 - 菜单弹窗:菜单弹出时
space、enter、y确认,esc/q关闭。
在单容器场景(非 Compose 项目)下,lazydocker 还会把容器面板标题显示为Conteneurs autonomes(Standalone Containers),该逻辑位于 pkg/gui/views.go 的InDockerComposeProject判断中。
如何在法语环境中启用与复现
语言选择的官方入口是配置文件中的gui.language字段(默认值"auto",示例配置见 docs/Config.md,模板文件为 config/config.yml)。设为auto时,程序通过detectLanguage探测操作系统语言环境;若探测结果以fr开头,则与frenchSet()匹配并整体替换界面文案(pkg/i18n/i18n.go 的HasPrefix匹配逻辑)。需要留意:docs/Config.md中language的注释示例只列出了一部分语言码,而实际支持的完整注册表应以 pkg/i18n/i18n.go 中GetTranslationSets()的返回为准,其中已注册fr。
验证这套快捷键与文案一致性时,可重新生成法语速查表并观察其输出是否符合 Keybindings_fr.md:
# 在项目根目录执行 LANG=fr go run scripts/cheatsheet/main.go generategenerate.go内部会为每一种注册语言设置LC_ALL环境变量并重建临时应用实例(SetupFakeGui),再调用GetInitialKeybindings()抓取绑定,因此最终文档总是与pkg/gui+pkg/i18n的当前代码保持同步;main.go同时提供check子命令用于校验文档与绑定是否过期。
小结
通过 Keybindings_fr.md 这张法语速查表,可以完整掌握 lazydocker 的操作语法:项目面板承载配置与日志,容器/服务面板覆盖 Docker 生命周期各阶段并区分单体与小写/项目级大写键位,镜像/卷/网络面板共用c/d/b模板,enter、[、]、/是贯穿所有列表的通用操作,esc负责从主面板返回,+/_与1~6则是全局布局与面板跳转的快捷键。同时,本文的源码追踪也说明了一个实践要点:这类速查文档是「按键绑定 → 翻译集 → 生成器」流水线的产物,理解 pkg/gui/keybindings.go、pkg/i18n/french.go 与 pkg/cheatsheet/generate.go 三者关系后,你既能按表操作,也能在需要时自行扩充法语(或其他语言)的键位与文案并重新生成文档。
【免费下载链接】lazydockerThe lazier way to manage everything docker项目地址: https://gitcode.com/GitHub_Trending/la/lazydocker
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考