找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2828

积分

0

好友

392

主题
发表于 8 小时前 | 查看: 3| 回复: 0

在前面的文章中,我介绍了如何利用 org mode 实践 GTD 理念。实际上,org mode 与其他工具的结合,可以打造出一个功能强大且高度可定制的个人笔记系统。

嵌入 PlantUML 实现文本绘图

作为一名程序员,对 uml 图自然不陌生。时至今日,虽然UML显得有些“传统”,但它依然是我理清思路、设计架构时不可或缺的工具。而 plantuml 的最大优势在于,它能将纯文本描述转化为直观的图表。

要使用它,首先需要完成环境配置。你可以在 plantuml 入门 找到详细的安装步骤。对于我使用的 Archlinux 系统,首先需要确保 Java 环境已就绪。

sudo pacman -S jdk21-openjdk

根据 PlantUML 官方说明,Java 8 版本即可运行,但我倾向于安装较新的版本以获得更好的性能支持。

此外,PlantUML 生成某些类型的图表(如类图、组件图)需要依赖 graphviz 进行布局渲染,因此我们也需要一并安装它。

sudo pacman -S graphviz

基础环境搭建好后,就可以下载 PlantUML 的主程序 jar 包了。这个 jar 包可以放置在任何位置。既然是配合 Emacs 使用,我选择将它放在 ~/.emacs.d/lib 目录下,作为编辑器的功能依赖库。

为了验证安装是否成功,我们可以使用官网的经典示例进行测试。

@startuml
Alice -> Bob: test
@enduml

将上述文本保存为 test.txt,然后在终端执行命令 java -jar plantuml.jar test.txt。命令执行后,默认会在当前目录生成一个名为 test.png 的图片。如果能看到生成的简单序列图,说明环境配置正确。

接下来就是让 Emacs 与之联动了。根据 官方 文档,针对 Emacs 提供了名为 plantuml-mode 的扩展插件。通过以下配置,我们不仅可以高亮编辑 .puml 文件,还能让 org-mode 的代码块直接执行 PlantUML 并内嵌结果图。

(use-package plantuml-mode
  :ensure t
  :mode ("\\.puml\\'" "\\.plantuml\\'")
  :config
  (setq plantuml-default-exec-mode 'jar)
  (setq plantuml-jar-path (expand-file-name "~/.emacs.d/lib/plantuml.jar")) ;; 设置plantuml jar包的位置
  ;; 让org代码块能识别plantuml语法
  (add-to-list 'org-src-lang-modes '("plantuml" . "plantuml"))
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((plantuml . t)))
  (setq org-plantuml-jar-path plantuml-jar-path)
  )

配置完成后,就可以在 org 文件中愉快地“写”图了。依然是使用那个简单的例子:

#+begin_src plantuml :file demo.png
  @startuml
  Alice -> Bob: test
  @enduml
#+end_src

这里必须通过 :file 参数来指定生成图片的链接和名称。执行该代码块(通常是 C-c C-c),就会在当前目录生成 demo.png,并在编辑器中预览链接。

在Emacs org-mode中执行PlantUML源码块并预览UML图的效果

为了方便快速启动绘图,你还可以为 PlantUML 代码块创建专属的 yasnippet 模板。关于更高级的绘图技巧和配置细节,你可以在许多优秀的技术文档和社区分享中找到灵感。

使用 org-roam 构建网状笔记系统

在笔记方法上,我个人更偏爱双链笔记(Zettelkasten)的理念。简单来说,它类似于维基百科,允许你在笔记之间随意建立链接,最终形成一个相互关联的知识网络。

传统的树状结构笔记(例如许多笔记本软件采用的文件夹层级)要求你在记录之初就做出明确的分类,这有时很困难。我们学习新知识往往是零散、发散的,很难立即将其纳入一个严密的体系。而且,跨学科的知识点可能同时属于多个领域,就像查理·芒格推崇的“多元思维模型”所强调的,我们很难将某个概念仅仅归入单一类别。

双链笔记则没有严格的层级限制,它天生就是网络结构。任何一条笔记都可以自由引用其他笔记,这更符合我们大脑的认知习惯:先记下闪念和碎片,随着积累和思考的深入,再通过链接自然地将它们组织成体系。

在 Emacs 生态中,org-roam 插件是实现这一理念的绝佳工具。

(use-package org-roam
  :ensure t
  :after org
  :init
  (setq org-roam-v2-ack t)
  :config
  (org-roam-setup)
  :custom
  (org-roam-directory "~/org/roam/")
  :bind
  (("C-c n f" . org-roam-node-find)
   (:map
    (("C-c n i" . org-roam-node-insert)
     ("C-c n o" . org-id-get-create)
     ("C-c n t" . org-roam-tag-add)
     ("C-c n a" . org-roam-alias-add)
     ("C-c n l" . org-roam-buffer-toggle)))))

org-roam 的体系里,每一个 org 文件就是一个独立的笔记节点。通过快捷键 C-c n f (org-roam-node-find) 可以快速查找或创建一个新节点,新建的文件会自动保存到预设的 org-roam-directory 目录中。

在编写笔记时,若需要关联到另一个已有的知识点,只需使用 C-c n i (org-roam-node-insert) 即可在光标处插入一个指向该笔记的链接。当你对某个主题的理解逐渐深入,可以通过 C-c n t (org-roam-tag-add) 为其添加标签,便于后期的聚合与检索。

另外,有时我们需要在一个主笔记下细化几个子观点,这些子观点会以子标题的形式存在。如果希望从其他笔记直接链接到某个特定子标题,可以在该子标题上执行 C-c n o (org-id-get-create) 为其创建一个唯一的 ID。请记住,org-roam 的链接本质上是基于 ID 的,使用 org-roam-node-find 创建新节点时,这个 ID 其实已经自动生成了。

为了让笔记间的关联网络可视化,我们可以启用 org-roam-ui

(use-package org-roam-ui
  :vc (:url "https://github.com/org-roam/org-roam-ui"
       :rev :newest)
  :after org-roam
  :config
  (setq org-roam-ui-sync-theme t
        org-roam-ui-follow t
        org-roam-ui-update-on-save t
        org-roam-ui-open-on-start t))

从 Emacs 29 开始,内置了从 Git 仓库直接安装包的功能。由于 MELPA 仓库未收录 org-roam-ui,上述配置使用 :vc 关键字直接从其 GitHub 仓库安装。

安装完成后,通过命令启动 org-roam-ui-mode,它会自动在本地启动一个 Web 服务,并打开浏览器访问 http://127.0.0.1:35901/。在那里,你可以看到所有笔记节点及其链接关系构成的动态图谱,直观地展示你的知识网络。具体功能和配置,请参考其官方文档

小结与展望

至此,Emacs 对我来说已经成为一个集代码编辑、笔记管理和日程规划于一体的高效工作环境。因此,这个系列的“折腾”将暂告一段落。但这并不意味着终结,后续如果遇到更好的配置方案、有趣的插件或有了新的实践心得,我依然会继续更新。

我必须承认,自己对 Emacs 和 Elisp 的理解仍很浅显,当前的配置也仅停留在“够用、好用”的阶段。在撰写这个系列的过程中,我得到了许多读者的反馈与鼓励,也遇到了高手为我指正错误、解答疑惑,在此一并感谢。

从一个对 Emacs 一知半解的新手,到拥有了一套顺手的个性化配置,这个过程本身充满了探索的乐趣。下一步,我计划沉下心来,认真阅读 Elisp reference manual,希望能更深入地理解这门强大的扩展语言,从而更好地驾驭这个“编辑器的操作系统”。

最后,列举一些在本系列文章中对我启发巨大的教程与资源,它们是我学习路上的重要路标:

当然,还有更多未曾记录但同样给予我帮助的博客文章与社区讨论。整个探索过程让我深刻体会到,一个活跃的开源实战社区对于个人成长是多么重要。如果你也在构建自己的数字工作流,不妨到 云栈社区 看看,那里有许多关于工具、效率和计算机基础的深度讨论,或许能给你带来新的灵感。




上一篇:运维工程师亲测:Ubuntu 24.04.3 已可作为日常主力系统
下一篇:用自然语言进行API负载测试:PromptMeter工具使用指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-3 18:56 , Processed in 0.276997 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表