Hacker News 中文摘要

RSS订阅

Emacs 31:Markdown-ts模式非官方指南 -- Emacs 31: An unofficial guide to Markdown-ts-mode

Emacs 31发布了实验性的markdown-ts-mode,该模式功能丰富,已覆盖CommonMark规范和大部分GFM规范,并支持代码块、目录等额外功能,值得尝试使用。

正文

好的,这是根据您的要求,对原文进行的中文重述:

Emacs 31 的 markdown-ts-mode 非官方指南

Emacs 31 已发布,其中包含一个实验性的新功能:markdown-ts-mode。本指南将帮助您快速上手这个模式,并解答您关于其是否成熟、是否值得使用的疑问。

功能特性

尽管是实验性模式,但 markdown-ts-mode 功能已经相当丰富。它完整支持 CommonMark 规范,并覆盖了大部分 GitHub Flavored Markdown (GFM) 规范。此外,它还提供了一些额外功能,例如对非 ts-mode(如 elisp)的代码块支持、目录生成工具,以及与 pandoc 和 gfm 等外部转换器的接口。

安装与启用

实验性模式意味着 Emacs 默认不会启用它。您需要手动加载该库。推荐使用 use-package 进行配置,或者直接使用 require 加载。重要提示:无需从 MELPA 等包管理器下载,因为 Emacs 31 已内置该模式,且旧版 MELPA 仓库已归档且功能不全。

首次使用与语法安装

首次打开 Markdown 文件时,如果系统缺少 markdown 的 tree-sitter 语法,Emacs 会提示您安装。您只需同意即可,Emacs 会自动下载并编译。Markdown 模式需要两个语法:主语法和内联解析语法。

如果文件中的某些部分(如 YAML 头部)没有正确着色,通常是因为缺少对应的语法。您可以使用 M-x treesit-install-language-grammar 命令来安装缺失的语法。例如,为 YAML 头部安装 yaml 语法。如果安装时没有自动提示仓库地址,您可以从 yaml-ts-mode 的源代码中找到它,并手动输入。

核心功能一览

您可以通过点击模式行或菜单栏的 Markdown 选项,或使用 Ctrl + 右键 来访问功能菜单。

  • 编辑:

    • 强调:使用 C-c C-x C-f 快捷键,然后按 b(粗体)、i(斜体)、s(删除线)、c(行内代码)等。C-c C-x RET 可以隐藏标记符号,让文档更易读。
    • 标题:直接输入 # 等符号。使用 M-<left> 和 M-<right> 提升或降低标题级别。M-<up> 和 M-<down> 可以移动整个章节。TAB 键可以折叠或展开标题下的内容。
    • 列表:M-RET 插入新列表项。RET 会自动延续列表。M-<left> 和 M-<right> 调整缩进。C-c C-c 切换任务复选框的状态。
    • 代码块:C-c C-, 然后按 ` 插入围栏代码块,并提示输入语言。代码块会使用对应语言的模式进行语法高亮。将光标置于代码块内,即可获得该语言的缩进、补全等编辑支持。
    • 表格:C-c C-, 然后按 t 插入表格。在表格内,TAB 和 S-TAB 在单元格间移动,RET 和 S-RET 在行间移动。C-c C-c 对齐整个表格。
    • 链接与图片:支持标准链接和片段链接(如 [intro](#intro))。C-c C-x C-v 可以切换图片的内联显示。
  • 导航:

    • C-c C-n / C-c C-p:下一个/上一个标题。
    • C-c C-u:跳转到父级标题。
    • M-x imenu:通过补全跳转到任何标题或命名代码块。
    • M-x markdown-ts-view-mode:进入只读视图模式,使用 n、p 等单键导航。
  • 目录 (TOC):

    • M-x markdown-ts-toc-insert-template 插入目录标记。
    • M-x markdown-ts-toc-generate 生成目录内容。
    • 支持 min-depth、max-depth 等多种参数自定义。
  • 导出:

    • M-x markdown-ts-convert 或 markdown-ts-convert-file 可以将缓冲区或文件转换为 PDF(通过 pandoc)或 HTML(通过 pandoc、cmark 等)。
  • 其他:

    • M-x markdown-ts-browse-commonmark-spec 和 M-x markdown-ts-browse-gfm-spec 可直接打开规范文档。
    • 支持与 eglot 和 eldoc 的实验性集成,用于渲染 LSP 服务器提供的文档。

自定义

您可以通过 M-x customize-group RET markdown-ts RET 进行大量自定义,包括标记符号的显示、代码块行为、表格设置、导出选项和目录样式等。

如何提供帮助

最好的帮助方式就是使用它。如果遇到问题,请通过 M-x report-emacs-bug RET 报告错误,并附上能重现问题的最小示例。

关于 Bug 和限制

遇到问题可能源于模式本身、tree-sitter 语法、Emacs 的 tree-sitter 集成,或整个 tree-sitter 生态系统。语法是共享的外部资源,其变更需要多方协商。此外,tree-sitter 与间接缓冲区(indirect buffer)不兼容,这会导致在间接缓冲区中无法进行语法高亮,这是 Emacs 本身的限制。

结论

“实验性”标签并不意味着 markdown-ts-mode 功能简陋或不可用。它表示该模式仍在发展中,其 API 和行为可能发生变化。我们鼓励您尝试使用它,您的反馈将帮助我们使其更加完善。

评论

根据评论内容,主要观点和论据总结如下:

1. 对Emacs新功能“ts-mode”的说明(认可度:中性) - 评论1指出,“ts-mode”是使用tree-sitter进行解析和高亮的模式,适合长期未关注Emacs演进的用户。 - 评论4补充说明:ts代表tree-sitter,性能优异;支持CommonMark和GFM规范(如复选框、删除线);该模式为内置功能,无需额外包;目前处于实验阶段,需用户主动启用。 - 关键引用:pjdesno:“'ts-mode' refers to a mode which uses tree-sitter for parsing, highlighting etc.”;RahulMJ:“This mode is BUILT-IN, so no extra packages are needed.”

2. 对Emacs与生成式编码工作流的疑问(认可度:中性) - 评论2询问如何将Emacs与生成式编码结合,希望实现类似PR审批的代码生成流程,但指出AI编码包与最新Emacs不兼容。 - 关键引用:edgyquant:“I’m trying to get a workflow where I can generate code and approve it like a PR... the ai coding package isn’t working with the latest eMacs.”

3. 对Emacs的批评与改进期望(认可度:负面) - 评论3因org-mode文件非原生Markdown格式,导致协作不便而停止使用Emacs。希望有以Markdown为中心的org-mode替代方案,保留Lisp自定义能力,并支持基础功能(笔记、清单、截止日期等)。 - 关键引用:taude:“org-mode files weren't fully native Markdown files, which caused annoying friction when collaborating with others.”;“I'd love to get Emacs back... have it be a first class markdown editor, organizer, and potentially collaboration.”

4. 对Doom Emacs的正面反馈(认可度:正面) - 评论5表示刚切换到Doom Emacs,非常喜欢。 - 关键引用:seamossfet:“just switched to doom emacs this month, absolutely loving it tbh.”