更改代码块的 emacs 组织模式键绑定

Posted

技术标签:

【中文标题】更改代码块的 emacs 组织模式键绑定【英文标题】:Change emacs org-mode key binding for code block 【发布时间】:2018-11-21 13:39:23 【问题描述】:

在 org-mode 中,我使用 <s 然后 TAB 插入代码块。此操作将插入一个代码块,如

 #+BEGIN_SRC
    .
    .
    .
 #+END_SRC

但我想修改此操作以插入类似的内容

#+BEGIN_SRC python -n :results output pp replace :exports both
    .
    .
    .
#+END_SRC

我知道可以在 emacs 初始化文件中更改 :result:exports 的默认行为,但我更喜欢更改此快捷方式行为,因为它使我能够更改行中的选项。

【问题讨论】:

【参考方案1】:

根据legoscia 的answer 回答我自己的问题。

如Easy Templates section of the org-mode manual 中所述,您可以通过自定义变量org-structure-template-alist 来修改这些模板。使用M-x customize-option 并应用更改会将所有简单模板添加到您的init 文件中,如果您不喜欢它,您可以在init 文件中添加一行来更改模板或添加一个模板。

就我而言,我将此行添加到我的 emacs init 文件中以添加 <p 然后 TAB

(add-to-list 'org-structure-template-alist '("p" "#+BEGIN_SRC python -n :results output pp replace :exports both\n?\n#+END_SRC"))

所有积分都转到legoscia

【讨论】:

【参考方案2】:

从 Org 9.2 开始,@shae128 采用的方法不再有效。相反,您需要使用 tempo-define-template,如下所示:

(tempo-define-template "python-block"
           '("#+begin_src python :results raw output"
             n n p n n
             "#+end_src")
           "<p"
           "Insert an outputting Python block"
           'org-tempo-tags)

n 代表换行符,p 代表在哪里留下标记,&lt;p 代表在点击标签时展开的命令。

感谢Omar's answer here

【讨论】:

【参考方案3】:

如the Easy Templates section of the org-mode manual 中所述,您可以通过自定义变量org-structure-template-alist 来修改这些模板。 (使用M-x customize-option。)

对于&lt;s,默认扩展为"#+BEGIN_SRC ?\n\n#+END_SRC"。您可以编辑它以在BEGIN_SRC 之后包含您想要的选项。或者,您可以添加一个新模板,例如&lt;p,展开成你想要的文字。

【讨论】:

谢谢,您的回答解决了我的问题,但是由于它将所有简单模板的配置添加到 init 文件中,我将根据您的回答添加另一个答案,这将使 init 文件更具可读性,只需添加一行新的或编辑过的简单模板。所有学分都归@legoscia

以上是关于更改代码块的 emacs 组织模式键绑定的主要内容,如果未能解决你的问题,请参考以下文章

如何为带参数的交互式功能/命令创建Emacs键绑定?

描述emacs中的绑定过滤

如何从 Emacs 中的次要模式键盘映射中删除键?

如何定义键绑定以在 emacs 中的次要模式之间切换?

如何在 Emacs 中选择或突出显示一个块?

在 OSX 上的 GNU Emacs 中,激活 Mavericks 全屏模式的键绑定?