org-mode源代码包含行号

5

Org-mode 有一个非常好的功能,可以像这样包含源代码:

#+begin_src java -n
    /**
     * @param foo
     */
    public static void doBar(Baz ba)
    {
        Collection<String> strings = ba.getStrings(true);
        return strings;
    }
#+end_src

-n选项显示行号。

有一个+n选项可让行号从上一个块继续。

是否有任何选项可以设置起始编号?这对于源代码片段非常有用,因为您希望行号与整个文件对应。


嗨@justingordon。如果您有机会,能否将接受的答案更改为@jco的答案?它现在是您问题的正确答案。 - Shon
3个回答

10

这是在 Org Mode 9 中添加的功能。现在可以向 -n+n 传递数字。

因此,例如,您可以使用以下标题使示例从第12行开始:

#+begin_src java -n 12
...
#+end_src

4

我同意jco的看法。对于这个问题,一个详细的回答可以像下面这样阅读。但是除了屏幕截图外,其他都是从手册中复制粘贴的。

Literal Examples章节所述,您可以向源块和示例块添加行号:

在示例和src代码块中,您可以在BEGIN行的末尾添加-n开关,以获得示例的编号行。 -n带有可选的数字参数,指定块的起始行号。如果使用+n开关,则将从上一个已编号片段延续到当前片段中。 +n也可以带有数字参数。参数的值将添加到前一个块的最后一行,以确定起始行号。

您还可以引用行号:

在字面示例中,Org会将诸如(ref:name)之类的字符串解释为标签,并将其用作特殊超链接(例如用单括号括起来的引用名称)的目标。在HTML中,将鼠标悬停在此类链接上将远程突出显示相应的代码行,这很酷。

演示这两个功能的示例是

#+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.

这将产生:

具有行号的参考代码的屏幕截图。


1

此答案已过时,请查看其他答案。

据我所知,没有实现的选项。

一个非常hacky的解决方案是,定义自己用于+ n工作的计数器。 它的格式如下:

#+begin_src emacs-lisp :exports results
;; we need it not be a buffer-local value
(setq-default org-export-last-code-line-counter-value 42)
#+end_src

由于这是一个不太优雅的hack,它只能在第一个块中工作一次,但我不确定±n的行为。因为有":exports results",所以它会在对其他块进行编号之前被评估(当我尝试时实际上没有导出任何东西),因此它可以出现在您的缓冲区中的任何位置。
我猜实现这个并不难,或者可能有人更懂elisp可以做得更好,但我希望这会有所帮助。

没有尝试过,但看起来合理。 - justingordon
1
过时了。请参考上面的答案,了解后续的解决方案。 - 147pm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接