虽然我能理解代码块中的链接无法跳转, 因为本来代码块的内容就应该被当成 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 的么?
Tokubara:
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 个赞