Wie setze ich eine Verknüpfung für # + BEGIN_SRC # + END_SRC?


14

Ich habe das Handbuch zum Organisationsmodus gelesen, aber keine Verknüpfung zum Einfügen gefunden:

#+BEGIN_SRC 
#+END_SRC

Ich denke, ich muss eine Konfiguration in ~ / .emacs erstellen, um eine Verknüpfung festzulegen. Oder gibt es eine Abkürzung, aber ich wusste es nicht?

Ich benutze R viel in Emacs. Gibt es eine Möglichkeit, eine separate Verknüpfung zu erstellen, um dies zu erstellen?

#+BEGIN_SRC R
#+END_SRC

Antworten:


21

Der Org-Modus verfügt über einen integrierten Mechanismus zum Einfügen von Quellblöcken. Siehe Einfache Vorlagen im Org-Handbuch. Die Standardkonfiguration bietet Vorlagen für eine Reihe von # + BLOCKS, und Sie können Ihre eigenen durch Anpassen hinzufügen ‘org-structure-template-alist’.

Öffnen Sie beispielsweise <sTABeinen Organisationspuffer und geben Sie ein , um einen BEGIN / END_SRC-Block einzufügen.


13
Für org Version 9.2 funktioniert dies bei mir nicht sofort. Sie müssen (require 'org-tempo)zu Ihrem hinzugefügt haben .emacs. Hier ist auch ein aktualisierter Link zu Easy Templates -> orgmode.org/manual/Easy-templates.html
JMT2080AD

@ JMT2080AD Org 9.2 hat neue Funktionen eingeführt, die dies beheben. Siehe meine Antwort unten: emacs.stackexchange.com/a/47370/15177
Lorem Ipsum

Ist es , i bin spacemacs?
Jason Goal

15

[Dies ist eine Ergänzung / Klarstellung zu den Antworten von @glucas und @manandearth - es steht nicht für sich allein.]

Beachten Sie, dass in neueren Entwicklungsversionen (> = 9.2) des Organisationsmodus (und daher, sofern sich nichts ändert, in zukünftigen stabilen Versionen) org-structure-template-alistder Typ geändert wurde. Der integrierte Easy-Templates-Mechanismus wurde zugunsten eines allgemeineren Mechanismus, der auf dem tempoPaket basiert, aufgegeben . Leider erlaubt der neue Mechanismus nur Abkürzungen für einzelne Zeichen nach dem <, <swird also auf die #+BEGIN_SRC...#+END_SRCZeichenfolge erweitert, nach der das OP fragt, aber Dinge wie <elin der Antwort von @ manandearth funktionieren NICHT . Dies ist noch in Arbeit, daher können sich die Dinge ändern. Wenn Sie jedoch <XXXAbkürzungen mit mehreren Buchstaben verwenden , sollten Sie darauf vorbereitet sein, dass diese beim Upgrade des Organisationsmodus auf eine solche Version nicht mehr funktionieren .

Es gibt auch einen anderen Mechanismus: Er C-c C-,ist gebunden, org-insert-structure-templateder Sie zur Eingabe des Blocktyps auffordert, den Sie einfügen möchten (mit einem Menü, das alle verfügbaren Blöcke auflistet und die Sie mit einem einzigen Tastendruck auswählen können). Der Vorteil besteht darin, dass begin/endeine Region umbrochen wird. Wenn Sie also bereits eine Reihe von Informationen eingegeben haben und diese in einen Block einschließen möchten, müssen Sie sie nur als Region auswählen und C-c C-.gefolgt von einem einzelnen Zeichen eingeben um den Blocktyp zu wählen.

Siehe diesen Hinweis [fn: 1], die Dokumentzeichenfolge der (neuen) Funktion org-insert-structure-templateund die Datei org-tempo.el .

[fn: 1] Der Link ist möglicherweise ungenau, da er auf eine feste Zeilennummer in einer Datei verweist, die sich möglicherweise ändert. Wenn der Link Sie nicht an die richtige Stelle bringt, suchen Sie nach der Zeichenfolge "Strukturvorlagenerweiterung" - und bearbeiten Sie diese Antwort und korrigieren Sie die Zeilennummer - danke!


12

Das Verhalten des Quellblocks wurde in Org 9.2 geändert . Die Abkürzung <sfunktioniert standardmäßig nicht mehr. Stattdessen verwenden Sie C-c C-,welche Anrufe org-insert-structure-template.

Hinzufügen eines Quellblocks

Durch Drücken C-c C-,von wird ein Dialogfeld angezeigt. Drücken Sie TABund geben Sie dann ein src R. Dadurch wird ein Quellenblock und setzt den Cursor am Anfang der zweiten Zeile (let |seines Punkt ):

#+begin_src R
|#+end_src

Um dann innerhalb des Blocks zu bearbeiten, drücken Sie C-o, um eine neue Zeile zu öffnen.

Sie können eine Vorlage speichern, indem Sie dem Eintrag einen Eintrag hinzufügen org-structure-template-alist. Fügen Sie Folgendes in Ihre Datei ein init.eloder führen Sie es mit aus C-x C-e:

(add-to-list 'org-structure-template-alist '("r" . "src R"))

Wenn Sie dies tun C-c C-,, sehen Sie einen Eintrag für rin der Liste. Sie können den gleichen Ansatz für andere Sprachen wie Python, Ruby usw. verwenden. Ersetzen Sie einfach die CDR im oben gepunkteten Paar (der Teil "src R").

Um eine Zeile zwischen den Begrenzern des Quellblocks einzufügen, können Sie außerdem ein Zeilenumbruchzeichen mit einfügen C-q C-j. Das heißt, geben Sie src R C-q C-jdie cdr des oben gepunkteten Paares ein . Das Ergebnis sieht folgendermaßen aus:

(add-to-list 'org-structure-template-alist '("R" . "src R
"))

Nun , wenn Sie drücken R, wird Emacs den Quellenblock einfügen und setzen Sie den Cursor zwischen ihnen auf einer neuen Zeile (LET |sein Punkt ):

#+begin_src R
|
#+end_src

4
Die <sBindung ist noch vorhanden. Sie müssen sie nur (require org-temp)in Ihre Init einfügen, um sie zu aktivieren.
Tyler

(require 'org-tempo)
Tippfehlerkorrektur

8

babel-orgVersuchen Sie für Schlüsselbindungen für Codeblöcke Folgendes zu binden, <rgefolgt von a <tab>:

;; add <r for R expansion
(add-to-list 'org-structure-template-alist
         '("p" "#+BEGIN_SRC r :results output org drawer\n?\n#+END_SRC"
           "<src lang=\"r\">\n?\n</src>"))

Sie können die Quelle auch in ESS ändern.

So binden Sie, <pgefolgt von a, <tab>an einen Python-Blockcode, zum Beispiel:

;; add <p for python expansion
(add-to-list 'org-structure-template-alist
         '("p" "#+BEGIN_SRC python :results output org drawer\n?\n#+END_SRC"
           "<src lang=\"python\">\n?\n</src>"))

Ein Emacs-Lisp-Set, <elgefolgt von einem <tab>Willen, ist:

;; add <el for emacs-lisp expansion
(add-to-list 'org-structure-template-alist
         '("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC"
           "<src lang=\"emacs-lisp\">\n?\n</src>"))

andere nützliche Bindungen in org-modesind:

(add-to-list 'org-structure-template-alist
         '("ao" "#+attr_org: " ""))

(add-to-list 'org-structure-template-alist
         '("al" "#+attr_latex: " ""))

(add-to-list 'org-structure-template-alist
         '("ca" "#+caption: " ""))

(add-to-list 'org-structure-template-alist
         '("tn" "#+tblname: " ""))

(add-to-list 'org-structure-template-alist
         '("n" "#+name: " ""))

(add-to-list 'org-structure-template-alist
         '("o" "#+options: " ""))

(add-to-list 'org-structure-template-alist
         '("ti" "#+title: " ""))

Könnten Sie etwas näher erläutern, ob ich die Quelle auch auf ESS ändern könnte? Vielen Dank!
Xianwen Chen

Werfen Sie einen Blick auf diesen Link zur Babel R-Seite. Ich verwende Python und Jupyter Notebook, über eindie auch R unterstützt werden soll.
Manandearth

Für org-Version> 9.2 wäre die Syntax:(add-to-list 'org-structure-template-alist '("p" . "src python"))
ム ョ ー ム

2

Schauen Sie sich das YASnippet Emacs-Paket an. Sie können Codefragmente mit einigen Schlüsselwörtern und TAB hinzufügen. Es ist sowohl im Organisationsmodus als auch mit R-Skripten viel einfacher und nützlicher. Sie sollten einen Ordner in .emacs.d / snippets / ess-mode (und einen für den org-mode) haben, in dem Sie Dateien wie folgt speichern:

    # -*- mode: snippet -*-
    # name: in
    # key: in
    # -- 
    %in% 

Wenn Sie TAB eingeben, bleibt es in% in%, ähnlich:

# -*- mode: snippet -*-
# name: source_r
# key: srcr_
# --
#+BEGIN_SRC R 
$0
#+END_SRC

https://www.emacswiki.org/emacs/Yasnippet

https://joaotavora.github.io/yasnippet/snippet-development.html


1

Um dem Organisationsmodus eine neue Tastenkombination hinzuzufügen, können Sie verwenden

(define-key org-mode-map "\C-cs" 
    (lambda()(interactive)(insert "#+BEGIN_SRC R\n#+END_SRC")))

Dadurch wird die Zeichenfolge eingefügt, wenn Sie drücken C-cs.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.