Comment définir un raccourci pour # + BEGIN_SRC # + END_SRC?

14

J'ai lu le manuel du mode org mais je n'ai pas trouvé de raccourci à insérer:

#+BEGIN_SRC 
#+END_SRC

Je suppose que je dois créer une configuration dans ~ / .emacs pour définir un raccourci? Ou y a-t-il un raccourci mais je ne le savais pas?

J'utilise beaucoup R dans emacs. Existe-t-il un moyen de créer un raccourci distinct pour le créer?

#+BEGIN_SRC R
#+END_SRC
Xianwen Chen
la source

Réponses:

21

Le mode Org possède un mécanisme intégré pour insérer des blocs source. Voir Modèles simples dans le manuel Org. La configuration par défaut fournit des modèles pour un certain nombre de # + BLOCS, et vous pouvez ajouter les vôtres en les personnalisant ‘org-structure-template-alist’.

Par exemple, ouvrez un tampon d'organisation et tapez <sTABpour insérer un bloc BEGIN / END_SRC.

glucas
la source
13
Pour org version 9.2, cela ne fonctionne pas pour moi dès la sortie de la boîte. Vous devez avoir (require 'org-tempo)ajouté à votre .emacs. En outre, voici un lien mis à jour vers Easy Templates -> orgmode.org/manual/Easy-templates.html
JMT2080AD
@ JMT2080AD Org 9.2 a introduit une nouvelle fonctionnalité qui résout ce problème. Voir ma réponse ci-dessous: emacs.stackexchange.com/a/47370/15177
Lorem Ipsum
Est - il , i ben spacemacs?
Jason Goal
15

[Ceci est un ajout / clarification aux réponses de @glucas et @manandearth - il ne se suffit pas à lui-même.]

Notez que dans les versions de développement récentes (> = 9.2) du mode org (et donc, à moins que les choses ne changent, dans les futures versions stables), org-structure-template-alista changé de type. Le mécanisme intégré de modèles simples a été abandonné au profit d'un mécanisme plus générique basé sur le tempopackage. Malheureusement, le nouveau mécanisme n'autorise que les abréviations à un seul caractère après le <, il <ssera donc étendu à la #+BEGIN_SRC...#+END_SRCchaîne <eldemandée par l'OP, mais des choses comme dans la réponse de @ manandearth ne fonctionneront PAS . C'est toujours un travail en cours, donc les choses peuvent changer, mais si vous optez pour des <XXXabréviations à plusieurs lettres , préparez-vous à ce qu'elles se cassent lorsque vous mettez à niveau le mode organisationnel vers une telle version.

Il existe également un autre mécanisme: il C-c C-,est lié à celui org-insert-structure-templatequi vous demande le type de bloc que vous souhaitez insérer (avec un menu qui répertorie tous les blocs disponibles et vous permet de choisir en appuyant sur une seule touche). Son avantage est qu'il enroulera begin/endautour d'une région, donc si vous avez déjà tapé un tas de trucs et que vous voulez l'encapsuler dans un bloc, tout ce que vous avez à faire est de le sélectionner en tant que région et type C-c C-.suivi d'un seul caractère pour choisir le type de bloc.

Voir cette note [fn: 1], la chaîne doc de la (nouvelle) fonction org-insert-structure-templateet le fichier org-tempo.el .

[fn: 1] Le lien peut être inexact car il pointe vers un numéro de ligne fixe dans un fichier qui peut (non, va!) changer. Si le lien ne vous mène pas au bon endroit, recherchez la chaîne "expansion du modèle de structure" - et n'hésitez pas à modifier cette réponse et à fixer le numéro de ligne - merci!

NickD
la source
12

Le comportement du bloc source a changé dans Org 9.2 . L'abréviation <sne fonctionne plus par défaut. Au lieu de cela, vous utilisez C-c C-,quels appels org-insert-structure-template.

Ajout d'un bloc source

Appuyez sur pour C-c C-,afficher une boîte de dialogue. Appuyez sur TABpuis entrez src R. Cela insère un bloc source et place votre curseur au début de la deuxième ligne ( |soit point ):

#+begin_src R
|#+end_src

Pour modifier ensuite à l'intérieur du bloc, appuyez sur C-opour ouvrir une nouvelle ligne.

Vous pouvez enregistrer un modèle en ajoutant une entrée au org-structure-template-alist. Mettez ce qui suit quelque part dans votre init.elou exécutez-le en utilisant C-x C-e:

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

Maintenant, lorsque vous le ferez, C-c C-,vous verrez une entrée pour rdans la liste. Vous pouvez suivre la même approche pour d'autres langages, tels que Python, Ruby, etc. Remplacez simplement le cdr dans la paire en pointillés ci-dessus (la partie "src R").

De plus, pour insérer une ligne entre les délimiteurs de bloc source, vous pouvez insérer un caractère de nouvelle ligne à l'aide de C-q C-j. Autrement dit, tapez src R C-q C-jle cdr de la paire en pointillés ci-dessus. Le résultat ressemblera à:

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

Maintenant, lorsque vous appuyez sur R, Emacs insérera le bloc source et placera votre curseur entre eux sur une nouvelle ligne (que ce |soit le point ):

#+begin_src R
|
#+end_src
Lorem Ipsum
la source
4
La <sliaison existe toujours, il vous suffit d'inclure (require org-temp)dans votre init pour l'activer.
Tyler
Correction de faute de frappe:(require 'org-tempo)
NickD
8

pour les liaisons de touches pour les blocs de code, babel-orgessayez la liaison suivante <rsuivie d'un <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>"))

Vous pouvez également modifier la source en ESS.

Pour lier <psuivi de a <tab>à un code de bloc python, par exemple:

;; 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>"))

un emacs-lisp réglé sur <elsuivi d'un <tab>sera:

;; 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>"))

d'autres liaisons utiles org-modesont:

(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: " ""))
manandearth
la source
Pourriez-vous expliquer un peu plus sur la possibilité de modifier la source en ESS également? Merci!
Xianwen Chen
jetez un oeil à ce lien vers la page babel R J'utilise python et le cahier Jupyter via einlequel devrait également supporter R.
manandearth
Pour org-version> 9.2, la syntaxe serait:(add-to-list 'org-structure-template-alist '("p" . "src python"))
ギ ョ ー ム
2

Jetez un œil au package YASnippet Emacs. Il vous permet d'ajouter des extraits de code avec certains mots clés et TAB après. Il est beaucoup plus simple et utile à la fois en mode org et avec les scripts R. Vous devriez avoir un dossier dans .emacs.d / snippets / ess-mode (et un pour org-mode) où vous enregistrez des fichiers comme celui-ci:

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

Lorsque vous tapez TAB, il reste en% en%, de la même manière:

# -*- 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

Une tempête de neige
la source
1

Pour ajouter une nouvelle combinaison de touches au mode organisationnel, vous pouvez utiliser

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

Cela insérera la chaîne si vous appuyez sur C-cs.

choroba
la source