- 文档
- 教程
- 知识库
【免费下载链接】tldr
Collaborative cheatsheets for console commands 📚.
本文以仓库 pages.ar/common/minetest.md 这张阿拉伯语命令别名页为主体,讲解 tldr 项目中“别名页”这类页面的结构规范、多语言翻译模板,以及其背后的自动化生成与同步机制;同时顺着别名指针深入解析原命令
luanti的完整用法(客户端/服务器模式、世界与端口管理、日志与静默配置)。读完本文,你将能一眼看懂任意一张 tldr 别名页,并能用仓库自带的脚本生成、更新、同步你自己的别名页。
一、minetest 别名页:一张只干“指路”这件事的页面
在 tldr 页面体系中,当某个命令只是另一个命令的别名(alias)时,仓库不会为它重复写一份冗长的速查文档,而是用一张“别名页”指向原命令文档。仓库中的 pages.ar/common/minetest.md 就是这样的页面,其完整内容如下:
# minetest > هذا الأمر هو اسم مستعار لـ `luanti`. - إعرض التوثيقات للأمر الأصلي: `tldr luanti`对照英文原版 pages/common/minetest.md:
# minetest > This command is an alias of `luanti`. - View documentation for the original command: `tldr luanti`可以清晰地看到一张别名页固定由三个要素构成:
| 要素 | 英文版 | 阿拉伯语版 | 作用 |
|---|---|---|---|
| 标题行 | # minetest | # minetest | 页面所承载的“别名命令”名称,即命令本身 |
| 说明行 | > This command is an alias ofluanti. | > هذا الأمر هو اسم مستعار لـluanti. | 声明本命令是luanti的别名,是页面语义的核心 |
| 示例行 | - View documentation for the original command:+`tldr luanti` | - إعرض التوثيقات للأمر الأصلي:+`tldr luanti` | 给出“查看原命令文档”的唯一操作:执行tldr luanti |
注意示例中的命令始终是tldr luanti(用 tldr 客户端去查luanti),而不是minetest——这正是别名页“指路”语义的落点:用户无需记住minetest的细节,只需一条tldr luanti就能拿到原命令的完整速查表。这也意味着,任何支持 tldr 规范的客户端在读取此页时,都能自动理解“minetest → luanti”的别名关系。
二、别名页背后的规范:一份模板、四十余种语言
别名页并不是开发者随手写的,它严格遵守仓库维护的模板文件 contributing-guides/translation-templates/alias-pages.md。该文件按### 语言代码分节收录了 en、ar、bg、bn、bs、ca、cs、da、de、el、es、fa、fi、fr、hi、id、it、ja、ko、lo、ml、nb、ne、nl、no、pl、pt_BR、pt_PT、ro、ru、si、sr、sv、ta、th、tr、uk、uz、zh、zh_TW 等语言的标准别名页模板。
以阿拉伯语模板为例(对应### ar一节):
# example > هذا الأمر هو اسم مستعار لـ `example`. - إعرض التوثيقات للأمر الأصلي: `tldr example`将模板与 pages.ar/common/minetest.md 逐行对照可以看出,阿拉伯语页面完整继承了模板的全部四行结构,只是把三处占位符example替换成了实际值:
- 标题位置的
example→minetest(别名命令本身); - 说明行内联代码中的
example→luanti(原命令名); - 示例命令
tldr example→tldr luanti(文档查询命令)。
模板的存在保证了所有语言的别名页在结构上严格同构,从而让set-alias-page.py这类自动化脚本可以仅通过字符串替换即可生成任意语言的别名页,也保证了 tldr 客户端和 CI 校验(如 scripts/test-tldr-lint.sh)能够用统一的规则解析它们。
三、顺着别名指针:原命令luanti的完整用法
别名页的意义在于“去查原命令”。仓库中minetest指向的原命令文档是 pages/common/luanti.md,它才是真正承载速查内容的页面,完整覆盖如下:
# luanti > Infinite-world block sandbox game. - Start Luanti in client mode: `luanti` - List downloaded gamemodes: `luanti --gameid list` - Start Luanti in server mode by hosting a specific gamemode: `luanti --server --gameid {{game_id}}` - Start a server with the default world once it has been created: `luanti --server` - Start a server with a specific world: `luanti --server --world {{world_name}}` - Start a server on a specific port: `luanti --server --port {{port}}` - Write logs to a specific file: `luanti --logfile {{path/to/file}}` - Only write errors to the console: `luanti --quiet`该页面按“无参数启动 / 游戏模式管理 / 服务器托管 / 日志与输出控制”四个维度组织,结合页面描述可以整理出如下参数语义:
- 无参数执行
luanti:以客户端模式启动游戏,进入无限世界沙盒玩法,这是最常见的日常用法。 --gameid list:列出本机已下载的游戏模式(gamemodes),便于在多个模式间切换选择。--server --gameid {{game_id}}:以服务器模式启动,并托管指定的某个游戏模式,{{game_id}}需替换为具体的模式标识。--server:在世界已创建的前提下,用默认世界启动服务器。--server --world {{world_name}}:指定具体世界名称启动服务器,适合拥有多个世界、按世界隔离游戏内容的场景。--server --port {{port}}:在指定端口上启动服务器,用于自定义监听端口(例如避开默认端口或同时跑多个实例)。--logfile {{path/to/file}}:将日志写入指定文件,便于长期留存与事后排查。--quiet:仅在控制台输出错误信息,减少正常运行的噪音输出。
其中的{{...}}占位符是 tldr 页面的通用约定(见 contributing-guides/translation-templates/common-arguments.md),表示需要用户替换成实际值。你可以把minetest别名页与这张原命令页放在一起阅读:前者只负责一句话声明别名关系,后者负责给出可复制的全部实战命令。
四、别名页的自动化生成与同步:set-alias-page.py 源码解读
仓库提供了专用脚本 scripts/set-alias-page.py 来创建与同步别名页,这解释了为什么 pages.ar/common/minetest.md 能与英文版、阿拉伯语模板保持如此精确的一致。
4.1 模板解析与占位符替换
脚本通过_common.py中的get_templates()(见 scripts/_common.py)读取 contributing-guides/translation-templates/alias-pages.md,按### 语言代码节解析出每种语言的模板字符串;随后generate_alias_page_content()依次完成三次占位符替换(见 scripts/set-alias-page.py):
template_command = "example" result = template_content.replace(template_command, page_content.title, 1) result = result.replace(template_command, page_content.original_command, 1) result = result.replace(template_command, page_content.documentation_command)即“标题example→ 别名命令名、说明行example→ 原命令名、tldr example→ 文档查询命令”的三段式替换,最终写出目标页面。整个生成流程还通过get_locale()(见 scripts/_common.py)依据路径(如pages.ar/)自动识别语言,确保pages.ar/common/minetest.md只会套用阿拉伯语模板。
4.2 交互式创建与全量同步
脚本同时提供两种工作模式:
- 交互式创建(
-p/--page):如python3 scripts/set-alias-page.py -p common/minetest,脚本会引导输入页面标题、原命令名与文档查询命令,并实时预览将生成的页面内容,确认后才写入磁盘。若在仓库根目录下运行,脚本会自动定位 tldr 根目录(见get_tldr_root())。 - 全量同步(
-S/--sync):如python3 scripts/set-alias-page.py -S,脚本先扫描英文页面目录 pages,识别所有英文别名页(判定逻辑见get_alias_command_in_page()),再将其逐一同步到pages.ar、pages.fr、pages.zh等所有语言目录;配合-l ar可只同步阿拉伯语,配合-n可先做 dry-run 预览改动,配合-s可将改动提交 git stage。
此外,脚本顶部将tldr.md与aria2.md加入IGNORE_FILES(见 scripts/set-alias-page.py),避免误处理特殊页面;其中 pages/common/aria2.md 本身也是一张标准别名页(指向aria2c),可作为第二个阅读样例来验证模板结构。
五、实战:如何阅读和使用这类页面
对 tldr 用户来说,碰到minetest这类别名页时只需两步:
- 读说明行:确认
minetest是luanti的别名,不要浪费时间在别名命令上找重复文档; - 执行示例:运行
tldr luanti,客户端会直接展示 pages/common/luanti.md 中的全部速查条目(客户端模式、服务器托管、日志输出等)。
对贡献者来说,若要新增或修正某语言下的别名页,优先复用仓库脚本而不是手写:
python3 scripts/set-alias-page.py -p common/minetest python3 scripts/set-alias-page.py -S -l ar python3 scripts/set-alias-page.py -S -n三条命令分别对应“交互式创建/更新单页”“只同步阿拉伯语”“预览全量同步改动”。脚本对页面是否符合模板还有专门校验逻辑,确保生成的页面与模板逐字一致后才判定无需更新(见 scripts/set-alias-page.py 中set_alias_page()的比对分支),从而维持整个仓库别名页体系的规范统一。
六、小结
一张 pages.ar/common/minetest.md 级别的别名页虽然只有四行,却浓缩了 tldr 项目在“命令别名”场景下的完整设计:用模板(contributing-guides/translation-templates/alias-pages.md)保证多语言同构,用别名指针(tldr luanti)复用原命令文档 pages/common/luanti.md,用自动化脚本(scripts/set-alias-page.py)实现创建、校验与全量同步。理解了这张页面的“小”,也就理解了 tldr 知识库在大规模、多语言场景下保持内容一致与维护高效的“大”。
- 文档
- 教程
- 知识库
【免费下载链接】tldr
Collaborative cheatsheets for console commands 📚.
相关推荐
tldr 别名页面(Alias Page)机制详解:以阿拉伯语 `chdir` 页面为实例
tldr 别名页面(Alias Page)机制详解:以阿拉伯语 chdir 页面为实例 本篇文章以 tldr 仓库中的阿拉伯语别名页面 pages.ar/com
文档教程知识库Terax 完全指南:基于 Tauri 2 + Rust 的轻量级终端优先 AI 原生开发环境
Terax 完全指南:基于 Tauri 2 + Rust 的轻量级终端优先 AI 原生开发环境 本文以仓库内 docs/readme/README.es.md
文档教程知识库tldr 别名页面机制解读:以阿拉伯语 clojure → clj 页面为例
tldr 别名页面机制解读:以阿拉伯语 clojure → clj 页面为例 本篇指南以 tldr 仓库中 pages.ar/common/clojure.md
文档教程知识库
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考