【问题标题】:Emacs org-mode - format source blockEmacs org-mode - 格式化源代码块
【发布时间】:2014-10-19 04:59:31
【问题描述】:

是否可以让 org-mode 使用指定语言的缩进规则?例如,如果我有下面的代码,我希望var x; 在我按 Tab 键时正确缩进(就像在 javascript 模式下一样)。

#+BEGIN_SRC javascript
function foo() {
var x;
}
#+END_SRC

我设置了(setq org-src-fontify-natively t),它启用了语法高亮,但没有启用代码格式化。

【问题讨论】:

  • 如果您点击C-',格式应该没问题。这不是你的选择吗?
  • @Tobias 这会激活另一个不太方便的窗格,特别是如果我已经在那里打开了另一个缓冲区。如果可能的话,我希望能够内联做同样的事情。
  • 在源代码块中点击 TAB 时,我得到了正确的缩进。唯一的评论是整个块缩进2个空格。
  • 如果我将选项org-src-fontify-natively 设置为t 缩进有效,但在缩进点跳回源块的第一行之后。 org-version 给出8.2.5h
  • 对不起,我在上一条评论中的意思是org-src-tab-acts-natively。请参阅下面的答案。跳点是我的自定义造成的。如果我使用选项 -Q 启动 emacs,则缩进有效。

标签: emacs org-mode


【解决方案1】:

将选项org-src-tab-acts-natively 自定义为t。使用此设置 tab 可以在源代码块中按预期工作。如果您将源代码块缠在一起或使用 C-c ' 编辑它,则会删除两个空格的额外缩进。 我的org-version8.2.5h

【讨论】:

  • 谢谢。这有效,这就是我想要的。我不得不禁用yas-minor-mode,因为我在yas-minor-mode-map'.之外得到:yas--fallback: yasnippet fallback loop! This can happen when you bind yas-expand'
  • 至少对于 org 8.x 来说,org-src-tab-acts-natively 似乎也需要设置org-src-fontify-natively,否则没有效果。正在查看 yasn-p 错误:yasnippet #761 - Conflict with org-src-tab-acts-natively.
  • 我相信keycombo现在是C-c '
【解决方案2】:

在 spacemacs 中,org-edit-special 将打开一个具有正确模式的新缓冲区,用于常规格式化键组合。

C-c ' 调出新缓冲区

SPC m f l 格式化我的新缓冲区(clojure 主要模式)

, c 退出并保存。

【讨论】:

    【解决方案3】:

    是的!

    如果您采用Polymode 中定义的 poly-org-mode,源语言块模式特定的缩进将发生。

    但是等等。还有更多!

    其他特定于语言模式的功能(语法高亮、REPL 评估键盘快捷键、paren-balancing、代码导航等)也是如此。

    多年来,我断断续续地使用它,在此期间它消除了大多数特质,我现在全心全意地支持它并每天使用它。我不再使用 org-edit-special (control-')。

    【讨论】: