4.4 链接的各种操作 :创建,插入和进入链接

Org提供了多种方法来创建和跟踪链接

C-c l (org-store-link)

在创建一个连接到当前位置的链接. 这是一个全局命令(你需要自己创建绑定热键),你可以用它在任一个buffer中创建指向自己的连接. 这个被创建出来的链接可以随后插入到Org-mode的buffer中保存起来(见下文). 具体创建的是哪个类型的链接由当前buffer的类型来决定

  • Org-mode buffer 对于Org文件来说,若光标位于'<<>target>'处,则创建的链接指向该target. 否则链接指向当前的headline,同时以headline作为链接中描述部分的内容37

    如果headline有CUSTOMID属性的话,会创建一个连接到该客户化ID的链接. Org会创建一个全局唯一的ID,并根据org-link-to-org-use-i的值新增一条指向该ID的链接/替换原有的自定义ID. 因此在Org buffer中使用这个命令有可能会创建两个链接,一个指向可读的自定义ID,一个指向全局唯一的链接,这个全局唯一的链接即使在原条目被移动到其他文件后也是可用的. 随后当你要把链接插入Org文件时,你需要决定插入哪个链接.


  • Email/News客户端:VM,Rmail,Wanderlust,MH-E,Gnus 在很多Emacs邮件客户端buffer使用这个命令时,产生的链接会指向当前的邮件,甚至,在某些GNUS buffer中,可用指向分组. 邮件的作者和标题会作为链接的描述信息

  • Web浏览器:W3和W3M 生成的链接连接到当前的URL,网页title作为链接的描述信息

  • Chat:IRC 对于IRC链接来说,如果你设置变量org-irc-link-to-logs的值为t,那么创建的链接指向当前会话的日志,链接的形式类似于'file:/'. 否则的话,创建的链接指向当前用户/频道/服务器,链接的形式为'irc:/'

  • 其他类型的文件 对于其他类型的文件,创建的链接指向该文件,同时链接会有一个搜索字符串(参见指向文件链接的搜索项)指向当前行的内容.

C-c C-l (org-insert-link)

插入一个链接38.它会提示你输入一个链接,并将这个链接插入到当前的buffer中. 你可以输入上面例子中提到的任何类型的链接.随后系统会让你输入链接的描述文本并将生成的链接插入到buffer中39. 如果在调用该命令时选中了一些文本,那么选中的文本会成为默认的描述文本呢

  • 插入存储过的链接 所有在当前会话期存储过的链接都会记录到该命令提示的历史信息中,因此,在提示符中你可以用<up>和<down>(或者M-p/n)来切换历史链接信息

  • 支持补全 如果你要插入的链接前缀类似于'http:'或'ftp:',你可用通过按<TAB>键来自动补全.比如你可以只写链接的简写形式,然后按TAB键扩充它(参见链接的缩写).如果你在输入前缀部分之后直接按<RET>,Org会根据前缀的不通为各种不通类型的链接提供不通的补全模式40.例如,如果你输入`file <RET>`,就会进入文件路径补全状态(另一种进入该状态的方式是用C-u C-c C-l,见下文),而如果你输入`bbdb <RET>`,就会进入联系人名称补全的状态

C-u C-c C-l

插入一个指向本地文件的链接,你可以使用文件路径的补全功能来补全文件路径. 若插入的文件路径为相对路径,则该相对路径是相对与正在编辑的Org文件的目录来说的.你可以用`~/`代替你的home目录. 你也可用通过两个C-u前缀来强迫插入的链接为绝对路径

C-c C-l
光标需要停在链接上 当光标停在链接上时,C-c C-l允许你编辑链接的连接和描述信息
C-c C-o (org-open-at-point)

打开光标所在的链接,Org会使用web浏览器(由值browse-url-at-point定义)打开URL, 会使用VM/MH-E/Wanderlust/Gnus/BBDB打开相应的链接, 若链接为shell链接还会在在shell中执行链接中的命令. 若链接为内部链接,该命令会进行相应的搜索操作. 若光标出于标题的TAG列表处,则会创建相应的TAGS视图. 如果光标处于时间戳上,它会为该日期生成一个agenda. 另外如果光标处于'file:'类型的链接处,它会打开链接所指向的文件,如果指向的文件是远程文件或文本文件则直接用Emacs打开,如果是本地的非文本文件,则命令会挑选合适的程序打开. 命令是根据文件的扩展名来识别文件类型的. 哪种文件用哪种程序打开由org-file-apps选项配置. 如果你想用Emacs代替默认的程序来打开链接指向的文件,使用C-u前缀执行该命令. 而如果你不想用Emacs打开链接所指向的文件,使用C-u C-u前缀来调用该命令. 如果光标位于headline处,而这个headline刚好又不是个链接,则命令会搜索该headline下的所有链接并显示给你选择打开哪个链接. 如果你想setup the frame configuration for following links ,配置org-link-frame-setup变量

<RET>

若设置了'org-return-follows-link'值,<RET>也会打开光标所在的链接

鼠标右键 鼠标左键

在链接上单击鼠标右键,则会像执行了C-c C-o一样的打开链接. 在Emacs22或更高版本上,鼠标左键也能打开链接

鼠标中间键

类似于鼠标右键,但是强制使用Emacs打开链接,如果链接是内部链接,那么会在另一个窗口显示链接内容41

C-c C-x C-v (org-toggle-inline-p_w_picpaths)

切换是否内联显示连接的图片. 正常情况下,它只会内联哪些在链接中没有描述信息的图片,比如那些在导出时会内联的图片. 如果执行该命令时加了一个前缀参数,则命令也会显示那些有描述信息的链接图片. 通过配置变量`org-startup-with-inline-p_w_picpaths`42你也可以让emacs在一打开org的时候就内联显示图片.

C-c % (org-mark-ring-push)

把当前位置压入mark ring中,以方便以后方便跳回该位置. 那些打开链接的命令都会自动执行这一步

C-c & (org-mark-ring-goto)

跳回一个已经记录了的位置. 在访问内部链接和执行`C-c %`命令时都会记录下位置信息. 连续使用该命令多次可用跳到mark ring中更远的记录位置处

C-c C-x C-n (org-next-link) / C-c C-x C-p (org-previous-link)

跳到该buffer下一个/前一个链接处. 当到达buffer的最后一个/第一个链接处时,在执行该命令,第一次会显示失败,之后就跳到最后一个/第一个链接处继续搜索. 这两个命令的绑定键确实太长了;你可能希望用C-n和C-p来绑定:

(add-hook 'org-load-hook
  (lambda ()
    (define-key org-mode-map "\C-n" 'org-next-link)
    (define-key org-mode-map "\C-p" 'org-previous-link)))