慣性聚合 高效追讀感興趣之博客、新聞、科技資訊
閱原文 以慣性聚合開啟

推薦訂閱源

博客园 - 司徒正美
V
V2EX
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
月光博客
月光博客
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Кто решает судьбу вашего проекта? Разбираем заинтересованные стороны. BABOK #1 Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как Фалькон Тех меняет пространство к лучшему
Marcli: Markdown 之终端
amcured · 2026-05-24 · via Все публикации подряд на Хабре

于 Rust 之 CLI 生态,暗藏疫疠。其状:参考文本,读之令人疑色盲;报错信息,平直如板,可塞门下;而文档之文采,逊于市井收据。然今之终端模拟器,莫不备粗体、斜体、色彩及 Unicode 绘框符。其间隔,终端 所能,与所不能,相去甚远。显之,且多数CLI工具显之,其广度堪比大峡谷,其深则类马里亚纳海沟之漠视于用户.

Marcli此隙今合矣。取CommonMark Markdown,予饰ANSI之终端显。尔撰Markdown,尔之用户睹文采斐然。其意尽于此,足矣,非多言也.

Marcli terminal output

Marcli终端显

其何为

Marcli解Markdown于comrak — 此解析器亦驱动GitHub之渲染,遍历AST,为每支持之元素生成ANSI转义序列。代码围栏内之语法高亮,则赖syntect为之。 — 语法同 Sublime Text 之理。无 Pygments 之唤,无运行时之载,无配置之繁。唯简而用 — 此理,他生态系似视之为激也。

一函数之唤:

let output = marcli::render("# Hello\n\nSome **bold** text.", &Default::default());
println!("{}", output);

此乃典型之公开 API。函数 render 受 Markdown 之文,及 RenderOptions 之构,返String 蕴含 ANSI 字符序列。无「建造者」模式,无需链式调用十七次。无待预实现之特质。无潜藏于依赖树中、伺机吞噬尔之程序集之异步运行时。

支持之要素

Marcli 处理 CommonMark 全规范及数项扩展:

  • 标题 — 一级标题呈黄色加粗,二级标题呈蓝色加粗,三级及以下呈白色加粗。三级视觉层级,无一行配置。

  • 文本格式 — 加粗、斜体、删除线及代码格式,各具ANSI风格。

  • 项目符号列表 — 以三角形标记(▸)代之传统ASCII连字符。细微处,可读性竟有非比寻常之提升。

  • 编号之列 — 以圈数之符(①,②,③,…)列至二十项。逾二十则括号内记数。虽未闻有怨,然亦无人于神志清明时列二十一项之列。

  • 括围之码块 — 依Unicode符绘之框,题语言之名。言其语,则语法之照自启。

  • 引言 — 左列微暗之竖画,异于周遭文,无狂澜之态。

  • — 符号绘制的完整框架,列对齐正确(左对齐、右对齐、居中对齐)。标题加粗显示。

  • 任务清单 — 带复选框的标记(☑ / ☐)。

  • 主题分隔符 — 符号绘制的暗淡水平线。

  • 链接 — 文以蓝字加粗,其下 URL 以淡字显示.

  • 图像 — 文以括号内 URL 标注替代文,盖因终端,纵我辈竭力,犹非图像阅览之器.

此非贫者之Subset。此乃明智之人欲于终端显示者,亦无余事。

语法高亮,无需配置而能运作

围栏之码,标明其言,自能映光于内置语法之Syntect。Rust、Python、Elixir、JavaScript、Go、C、SQL、TOML、YAML,乃至Markdown,凡Syntect所识之语,Marcli必映其光。若不识,则绘为素文,同框而显。无陨、无警、无损经验,唯码无色。此革命之念「不陨于未知之入」,产业趋之,似若地质之变。

fn main() {
    let md = "```rust\nfn greet(name: &str) {\n    println!(\"Hello, {}!\", name);\n}\n```";
    let output = marcli::render(md, &Default::default());
    println!("{}", output);
}

要旨顏色一體,行文顏色殊異,註解淡雅而斜體顯之,函名突出於背景。自TextMate範疇至ANSI序列之映射內建,涵蓋諸要旨:要旨、行文、數字、註解、運算符、名稱、存儲修飾、實體名、支援宏、常數、變量及差異標記。每類皆有合宜之默認意義,皆可更易之。

可全然熄灭语法之辉:

let mut theme = marcli::Theme::default();
theme.syntax_highlight = false;
let opts = marcli::RenderOptions { theme, ..Default::default() };

色之全调,可藉TOML细调:

Marcli之显,其形其色,悉由结构所掌Theme:標題之色、列表之記、碼塊之框、表格之符、語法高亮之符式、主題之分界寬、引文之冠——皆備。其預設之值合理,然若需企業之色或高對比之題以利無礙,汝但改易所謂之項,其餘弗搖。Marcli非是之庫,變一參數,不須自頭至尾重構配置,低語「整體」之謂也。

主题自TOML文件载入:

let theme = marcli::Theme::load(".marcli.toml").unwrap_or_default();
let opts = marcli::RenderOptions { theme, ..Default::default() };
let output = marcli::render(markdown, &opts);

部分TOML文件仅覆写指定字段;其余皆循默认。未知键名默然无视,故主题得与未来版本相容。

主题之制非临时权宜,非以feature-flags逆施。此乃架构。渲染器无ANSI硬编码序列——每式皆自结构中读得。Theme渲染之际。此谓可生。全然无修饰结论,将所有样式置于空行,或调整输出以适应特定终端之能,仅更易序列。设计之明,令人讶异,何以须释之。

xterm.js及网页终端之CRLF支援

若尔CLI之器亦能于网终端运作xterm.js,譬如之,换行之序亦有所据。Marcli可设行移之次序。

let opts = marcli::RenderOptions {
    newline: "\r\n".into(),
    ..Default::default()
};
let output = marcli::render(markdown, &opts);

每行内之换行——于列表元素间,于代码块内,于段落间——皆用所设序列。无任何后处理之正则。无任何「可替」。\n\r\n 而祷之». 构造之正,适者,令若干匠者感若文化之震.

去 ANSI 以得纯文.

间或需结构之呈,无色 — 为记事,为导于文,为工具之助,其受转义序列所困。选项 escape_sequences 解此:

let opts = marcli::RenderOptions {
    escape_sequences: false,
    ..Default::default()
};
let output = marcli::render(markdown, &opts);
// output содержит структурированный текст
// с маркерами и отступами, но без ANSI-кодов

Marcli亦导出strip_ansi为公函数,若需清除任意文本之转义序列:

let plain = marcli::strip_ansi(some_ansi_string);

依赖历史

Marcli依于六库:comrak(Markdown解析),syntect(语法高亮),serdetoml(主题序列化),regex(ANSI移除)与once_cell(惰性静态文件)。诸般功能,若可,皆已禁用。无tokio。无hyper。无tower。无serde_json。无组合爆炸之feature-旗幟。无超乎serde所需之过程式宏。

。依本意,依赖树甚狭。CLI之器,增Marcli以渲染其出。--help 或诊断错误,非骤然继承HTTP客户端与TLS栈。于Rust之世,添一日期格式化之crates,常引半数网络栈随之,此诚值得特记——或,举杯香槟庆之。

何故择Marcli,而非他选?

Rust之生态,于终端之风格化输出,有多种法门,各司其职。然弊病在于,多数之法,非解汝之困也。

所谓“染色”之工具(如coloredowo-colorsansi_term),者,笔也。可染行文之色。不损结构,不治列次,不呈表格,不亮代码。若内容已具结构,则格式之理,悉由君自为。Marcli取无结构Markdown,而生全然结构之终端显文。此乃全然不同之抽象层级。较之二者,犹若问锤与屋孰优。

TUI框架(如ratatuitui-rs者,乃终端界面之完备工具也。其掌管布局、组件、事件循环、替代屏幕缓冲。若尔欲构交互之应用,此乃上佳之选。若尔欲印风格之手册而退,此实钝器也。Marcli,仅如文具之钮。无求于过,谢天谢地。

termimad — 亦为近便之选。亦能于终端渲染 Markdown。然 termimad 乃用自造之解析器(与 CommonMark 不相容),具异样(且更为幽晦)之主题模型,复不供 syntect 之语法着色。Marcli 则以 comrak 为解析之基(CommonMark,与 GitHub 相合),以 syntect 为语法着色之助(Sublime Text 之文法),且以平直可序列之结构显其视域之每一参数。Theme,若尔重合规之合、可设之能——择之明矣。

mdcat,乃独行之令符,非庖丁之器也。尔不可纳诸己之合二,而唤render()。其或行若外器,或需载己之合二于用者之机。Marcli,乃庖丁之器:纳之。Cargo.toml,呼其函数,得文。无同居之责。

,易为之利也。

凡与人事交之 Rust CLI 诸库,皆遇一问:何以呈结构之文?答几不离三途:ⓐ直吐裸文,冀用户能读(此乃近乎病态之乐观),ⓑ手自施 ANSI 格式,频唤数十次调用format! 乃以硬编码之 escape 序列(技艺中杂糅自虐之趣),ⓒ 欲提携框架,其重逾应用本身(此乃 node modules 之架构妙法也)。

Marcli 提议 ⓓ:以 Markdown 格式撰写消息、参考资料、错误说明、变更日志及诊断——此格式尔等团队已熟悉,编辑器已高亮,文档流程已渲染,一呼其能化为此终端输出,供人欲之阅之。

價者—喚一函即有六遞傳之依。利者—諸 CLI 所呈於世之文,或可為重、為斜、為亮、為標、為表、為引,兼支顏色,無需手弄 ANSI 之序。

汝之終端,當得更善。println!马勒—此乃予之至善。若其不配,然尔等用户实当配之.

链接

▸ 仓库:github.com/Oeditus/marcli-rust
▸ 文档:docs.rs/marcli
▸ 之包:crates.io/crates/marcli