Org-mode中的内联代码

136

Markdown允许使用嵌入代码。如何在org-mode中实现呢?

我知道有源代码块:

#+begin_example
blah-blah
#+end_example

但是我想要的是像这样的东西(显然,使用正确的语法,我不知道):

This is `embeded code`.

这可以在org-mode中完成吗?文档中找不到相关信息...


1
我也打算问类似的问题。谢谢 :D - alamin
在Markdown中,我们可以通过两行`````将代码块包含起来,这样做非常整洁。在org-mode中有没有类似的整洁方式呢?我不想每次都看到+BEGIN_SRC... - Student
3个回答

168

您可以使用=~符号将文本括起来,以便在等宽字体中排版并直接导出(这意味着它不会被处理为特定于org的语法):

This is =verbatim text= or ~code~.

您可以在 手册 的相关章节中找到有关 org-mode 标记元素的所有信息。


5
谢谢。拥有关键词就已经成功了一半。如果我早知道org-mode是用“单间隔字体”和“强调”来讨论这个问题,我本可以自己找到答案。:( 我一直在寻找“内置”和“嵌入式”,但没有结果。 - blueFast
是的,我记得当我寻找一种功能来隐藏org标记时,我也被“emphasis”这个术语所困扰。一旦你知道了这个术语,你就可以立即找到org-hide-emphasis-markers,但我在几乎偶然地找到它之前已经搜索了很长时间... - François Févotte
7
实际上,手册只是说“代码”,即用~括起来。 - squid
1
这个答案只是让代码看起来等宽,它并没有真正赋予它一个真实的BEGIN_SRC块具有的可执行属性。如果你想要那样的话,下面Tom的答案更好。 - Ken Williams
4
我发现~很丑陋。有没有办法使用重音符号代替它? - Joseph Tesfaye

165
虽然等宽字体在大多数情况下足够好,但内联代码块的形式为src_LANG[headers]{your code}。例如:src_xml[:exports code]{<tag>text</tag>}编辑:内联代码高亮当然是可能的,尽管需要修补org.el本身:这里给出的答案https://dev59.com/v2Ij5IYBdhLWcg3wYkRY#20652913可以像广告一样工作,将
- Inline code src_sh[:exports code]{echo -e "test"}

进入

enter image description here

在HTML导出中。这篇文章中获胜的答案https://dev59.com/v2Ij5IYBdhLWcg3wYkRY#28059832实现了相同的功能,而无需修补org.el,但如果您不喜欢编辑时的光学效果,则需要进行调整。

7
我认为这是最好的答案。手册中相关部分是14.1 代码块的结构 - Arne Babenhauserheide
1
手册上说:“实时代码块需要......” 这里的“实时”是什么意思?我希望文档中有更多示例,而不是主要关注正式的语法定义(但这不仅是org-mode的问题;在我看来,这更或多或少是一个普遍的问题)。 - Fernando Basso
可以在org-mode(或导出期间)中评估实时代码块,并将其结果插入文件。我使用此功能进行带有plant-uml的UML图以及有时带有Clojure代码块的操作。 - user73774
4
不错,但是我们仍然无法通过这种方式获得语法高亮,对吗?而且我觉得很奇怪需要添加“[:exports code]”,因为 http://orgmode.org/manual/exports.html#exports 上的文档说它是默认值。(但如果没有它,当我将org内容导出到markdown时,什么也不会被导出。) - Supernormal
我认为这不是“内联代码”,而是“代码块”。例如,我认为内联代码是文件名、短的(<1行)代码字符串,通常嵌入在其他文本中。 - James
@james:这正是问题所在,代码块有完全不同的语法。 - Tom Regner

1
我写了一个函数,希望能够有助于管理内联代码。
  1. 将此代码放入您的初始化文件中。
(defun org-insert-inline-code()
  "This function insert inline code `src_lang{inline code}' \nYour buffer must contain  '#+PROPERTY: header-args:lang    :exports code' where `lang` can be python or an other programming language."
  (interactive  (if (use-region-p)
            (progn
              (setq start (region-beginning))
              (setq end (region-end))
              (goto-char start)
                      (if (re-search-backward "^#\\+PROPERTY: header-args:[^[:blank:]]*" 1 t 1)
                          (progn
                            (forward-char 24)
                            (setq org-inline-lang (word-at-point))
                    (goto-char start)
                    (insert (concat "src_" org-inline-lang "{"))
                    (goto-char (+ 11 end))
                    (insert "}")                            
                            )))
          (progn
                    (setq start (point))
                    (if (re-search-backward "^#\\+PROPERTY: header-args:[^[:blank:]]*" 1 t 1)
                        (progn
                          (forward-char 24)
                          (setq org-inline-lang (word-at-point))
                  (goto-char start)
                  (insert (concat "src_" org-inline-lang "{} "))
                  (backward-char 2)
                            ))))))

(define-key org-mode-map (kbd "C-M-,") 'org-insert-inline-code)
  1. 你需要在org文件中添加这种属性
#+PROPERTY: header-args:python    :exports code

所需的[:exports code]是这样给出的,编程语言也可以通过函数来识别。

  1. 使用C-M-,将代码插入行中(函数会向后搜索以读取PROPERTY行中的语言并插入正确的命令)。

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