Org 提供了按正确语法创建链接、将其插入 Org 文件以及跳转链接的方法。
主要函数为 org-store-link ,通过 M-x org-store-link 调用。由于该功能十分重要,建议将其绑定到一个常用按键上(见 Activation)。它会为当前位置创建一个链接并保存,供稍后插入到 Org 缓冲区—详见下文。创建的链接类型取决于当前缓冲区:
对于 Org 文件,如果光标处存在 ‘<<target>>’ ,链接将指向该目标。如果光标处有命名块(使用 ‘#+name:’ ),链接将指向该名称。除此之外,链接指向当前标题,并以该标题作为描述文本。
如果该标题含有 ‘CUSTOM_ID’ 属性,则保存指向该自定义 ID 的链接。此外,根据 org-id-link-to-org-use-id 的取值,还可为链接创建并/或使用全局唯一的 ‘ID’ 属性30。因此在 Org 缓冲区中使用该命令,可能会生成两种链接:一种是基于自定义 ID、人类可读的链接,另一种是全局唯一、即便条目在文件间移动依然有效的链接。=ID= 属性可以是 UUID(默认)或时间戳,具体由 org-id-method 决定。稍后插入链接时,你可以选择使用哪一种。
当 org-id-link-consider-parent-id 为 t31 时,会考虑上层标题的 ‘ID’ 属性。这样即便某个具体目标、命名块或标题自身没有全局唯一 =ID=,也可以在拥有全局 ID 的上层标题或文件上下文内实现精确链接。
例如下方 Org 文件:
* Parent :PROPERTIES: :ID: abc :END: ** Child 1 ** Child 2
将光标放在 “Child 1” 处保存链接,会生成链接 ‘<id:abc::*Child 1>’ ,即便该子标题自身没有 ID,也能精确指向 “Child 1”。
几乎所有 Emacs 邮件客户端均受支持。链接指向当前文章,在部分 Gnus 缓冲区中则指向新闻组。描述文本根据变量 org-link-email-description-format 构造,默认包含收件人与主题。
链接为当前 URL,并以页面标题作为描述。
在 BBDB 缓冲区中创建的链接指向当前条目。
对于 IRC 链接,如果变量 org-irc-link-to-logs 非 nil ,则创建一个 ‘file’ 类型链接,指向当前对话日志中的相关位置;否则保存 ‘irc’ 类型链接,指向光标下的用户/频道/服务器。
对于任意其他文件,链接指向该文件,并附带一个搜索字符串(见 Search Options in File Links)定位当前行内容。如果存在活跃选区,选中的文字将作为搜索字符串的基础。你可以编写自定义 Lisp 函数,为特定文件类型选择搜索串并执行搜索(见 Custom Searches)。
你也可以定义指向其他文件的专用链接,见 Adding Hyperlink Types。
当光标位于日程视图中时,创建的链接指向当前行所引用的条目。
在 Org 缓冲区中,以下命令可用于创建、导航或对链接执行其他操作。
org-insert-link) ¶插入链接32。命令会提示输入要插入的链接,你可以直接输入链接内容:内部链接使用文本即可,外部链接则使用上文示例中的类型前缀。链接会连同描述文本一起插入缓冲区33。如果此时有选中的文本,该文本将作为默认描述。
当前会话中保存的所有链接都会出现在提示历史中,可通过 UP 和 DOWN(或 M-p、M-n)选择。
使用 TAB 补全可帮助输入合法的链接前缀,如 ‘http’ 或 ‘ftp’ ,包括通过链接缩写定义的前缀(见 Link Abbreviations)。如果只输入前缀后按下 RET,Org 会为部分链接类型提供专用补全支持34。例如输入 f i l e RET—另一种方式是 C-u C-c C-l,见下文—Org 会提供文件名补全;输入 b b d b RET 后则可以补全联系人姓名。
当以 C-u 作为前缀调用 C-c C-l 时,直接插入指向文件的链接,并可使用文件名补全选择文件。若被链接文件位于当前 Org 文件所在目录或其子目录,或路径使用 ‘../’ 相对当前目录书写,则插入相对路径;否则使用绝对路径,主目录部分尽可能用 ‘~/’ 表示。使用两层 C-u 前缀可强制使用绝对路径。
当光标位于已有链接上时,C-c C-l 允许编辑链接的地址与描述部分。
org-open-at-point) ¶打开光标处的链接。对于 URL 会启动网页浏览器(使用 browse-url-at-point );对于对应类型链接会启动 VM/MH-E/Wanderlust/Rmail/Gnus/BBDB;对于 shell 链接会执行其中命令。当光标位于内部链接上时,该命令会执行对应的搜索。当光标位于标题的标签部分时,会创建对应的标签视图(见 Matching tags and properties)。若光标位于时间戳上,则会生成该日期的日程。此外,它会用 Emacs 打开 ‘file’ 链接中的文本文件与远程文件,并为本地非文本文件选择合适的应用程序。文件类型仅根据扩展名判断,详见选项 org-file-apps 。若想覆盖默认应用、强制用 Emacs 打开,可使用 C-u 前缀;若想避免用 Emacs 打开,则使用 C-u C-u 前缀。
若光标位于标题上但不在链接处,Org 会显示该标题与正文中的所有链接。如果需要配置打开链接时的框架布局,可自定义 org-link-frame-setup 。
当 org-return-follows-link 开启时,RET 也可打开光标处的链接。
在链接上,mouse-1 与 mouse-2 的作用与 C-c C-o 相同,均可打开链接。
功能与 mouse-2 类似,但会强制用 Emacs 打开文件链接,并在另一个窗口中显示内部链接35。
org-mark-ring-push) ¶将当前位置压入 Org 标记环,方便后续返回。打开内部链接的命令会自动执行该操作。
org-mark-ring-goto) ¶跳回已记录的位置。打开内部链接的命令与 C-c % 都会记录位置。连续多次使用该命令可在历史位置环中依次回退。
org-next-link), C-c C-x C-p (org-previous-link) ¶在缓冲区中向前/向后移动到下一个/上一个链接。到达缓冲区边界时,搜索失败一次后会循环到另一端。该按键组合较长,你可能希望将其绑定到 M-n 和 M-p。
(with-eval-after-load 'org (define-key org-mode-map (kbd "M-n") #'org-next-link) (define-key org-mode-map (kbd "M-p") #'org-previous-link))
必须先加载 org-id 库,可以通过 org-customize 、在 org-modules 中启用 id ,或在 Emacs 初始化文件中添加 ‘(require 'org-id)’ 实现。
同时需要 org-link-context-for-files 和 org-id-link-use-context 均启用,默认即为启用状态。
插入链接并非必须使用该命令。Org 中的链接为普通文本,可直接输入或粘贴至框架中。使用该命令时,链接会自动包裹在双层方括号内,并提示输入可选描述文本。
插入已存储的链接后,该链接会从存储列表中移除。如需保留以便后续使用,可对 C-c C-l 使用三重 C-u 前缀参数,或配置选项 org-link-keep-stored-after-insertion 。
前提是已在 org-link-parameters 中为该链接的 :complete 属性定义了对应函数。
参见变量 org-link-use-indirect-buffer-for-internals 。