org mode 中的代码块链接无法跳转, 有没有办法可以让它跳转

虽然我能理解代码块中的链接无法跳转, 因为本来代码块的内容就应该被当成 raw contents, 与 org 的语法无关, 但如果能支持链接跳转那还是挺方便的, 这样就可以引用对某个数据结构的描述等等. 举个例子:

#+begin_src perl :results output
say "hello, world"; # say 与 print 的区别见 [[NGoYrH]]
#+end_src

但是点击后得到的是:

buffer 给出的内容并不是代码的执行结果, 而是笔记的另一段内容, 不知道是干啥的. 但用 C-h k 来看, RET 对应的命令是 org-open-at-point, 那不就该打开 link 的么?

org-open-at-point 不是只用来打开 link 的,它会根据上下文判断要执行的对象,在代码块中就是打开 Results

((eq type 'src-block) (org-babel-open-src-block-result))

org 目前只支持代码标签,和你的需求正好反过来,是从正文中跳转到指定代码,见 Literal Examples

#+BEGIN_SRC emacs-lisp -n -r
  (save-excursion                 (ref:sc)
     (goto-char (point-min))      (ref:jump)
#+END_SRC
In line [[(sc)]] we remember the current position. [[(jump)][Line (jump)]]
jumps to point-min.

(ref:sc) 等标签会在导出时去掉

可以写个函数来反向跳转:

(defun my-souce-code-tag-jump ()
  (interactive)
  (let* ((thing (org-no-properties (thing-at-point 'list)))
         (ref-text (nth 1 (split-string (substring thing 1 -1) ":")))
         (target (concat "[[(" ref-text ")]]")))
    (consult-line target)))

这样就能双向跳转了

2 个赞