Come impostare una scorciatoia per # + BEGIN_SRC # + END_SRC?


14

Ho letto il manuale della modalità org ma non ho trovato una scorciatoia da inserire:

#+BEGIN_SRC 
#+END_SRC

Immagino di dover creare una configurazione in ~ / .emacs per impostare un collegamento? Oppure, c'è una scorciatoia ma non lo sapevo?

Uso molto R in emacs. C'è un modo per creare un collegamento separato per creare questo?

#+BEGIN_SRC R
#+END_SRC

Risposte:


21

La modalità Org ha un meccanismo incorporato per l'inserimento di blocchi sorgente. Vedi i modelli semplici nel manuale dell'organizzazione. La configurazione predefinita fornisce modelli per un numero di # + BLOCCHI e puoi aggiungerne uno personalizzando ‘org-structure-template-alist’.

Ad esempio, aprire un buffer org e digitare <sTABper inserire un blocco BEGIN / END_SRC.


13
Per la versione 9.2 dell'organizzazione, questo non funziona immediatamente per me. Devi aver (require 'org-tempo)aggiunto al tuo .emacs. Inoltre, ecco un link aggiornato a Easy Templates -> orgmode.org/manual/Easy-templates.html
JMT2080AD

@ JMT2080AD Org 9.2 ha introdotto nuove funzionalità che risolvono questo problema. Vedi la mia risposta qui sotto: emacs.stackexchange.com/a/47370/15177
Lorem Ipsum

È , i bdentro spacemacs?
Jason Goal

15

[Questa è un'aggiunta / chiarimento alle risposte di @glucas e @manandearth - non si regge da sola.]

Si noti che nelle recenti versioni di sviluppo (> = 9.2) della modalità org (e quindi, a meno che le cose non cambino, nelle future versioni stabili), org-structure-template-alistha cambiato il suo tipo. Il meccanismo integrato di modelli facili è stato abbandonato a favore di un meccanismo più generico basato sul tempopacchetto. Sfortunatamente, il nuovo meccanismo consente abbreviazioni a carattere singolo solo dopo il <, quindi <sverrà espanso nella #+BEGIN_SRC...#+END_SRCstringa richiesta dall'OP, ma cose come <elnella risposta di @ manandearth NON funzioneranno. Questo è ancora un lavoro in corso, quindi le cose potrebbero cambiare, ma se si utilizzano <XXXabbreviazioni a più lettere , prepararsi a interromperle quando si aggiorna la modalità org a tale versione.

C'è anche un altro meccanismo: C-c C-,è legato al org-insert-structure-templatequale ti chiede il tipo di blocco che vuoi inserire (con un menu che elenca tutti i blocchi disponibili e ti permette di scegliere con un solo tasto). Il suo vantaggio è che avvolgerà begin/enduna regione, quindi se hai già digitato un sacco di cose e vuoi avvolgerlo in un blocco, tutto ciò che devi fare è selezionarlo come una regione e digitare C-c C-.seguito da un singolo carattere per scegliere il tipo di blocco.

Vedi questa nota [fn: 1], la stringa doc della (nuova) funzione org-insert-structure-templatee il file org-tempo.el .

[fn: 1] Il collegamento potrebbe non essere preciso perché indica un numero di linea fissa in un file che potrebbe (anzi, cambierà!). Se il link non ti porta nel posto giusto, cerca la stringa "espansione del modello di struttura" e sentiti libero di modificare questa risposta e fissare il numero di riga, grazie!


12

Il comportamento del blocco di origine è cambiato in Org 9.2 . L'abbreviazione <snon funziona più per impostazione predefinita. Invece, usi C-c C-,quali chiamate org-insert-structure-template.

Aggiunta di un blocco sorgente

Premendo si C-c C-,apre una finestra di dialogo. Premere TABe quindi accedere src R. Questo inserisce un blocco sorgente e posiziona il cursore all'inizio della seconda riga ( |sia il punto ):

#+begin_src R
|#+end_src

Per quindi modificare all'interno del blocco, premere C-oper aprire una nuova riga.

È possibile salvare un modello aggiungendo una voce a org-structure-template-alist. Inserisci quanto segue da qualche parte nel tuo init.elo eseguilo usando C-x C-e:

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

Ora quando lo fai C-c C-,vedrai una voce per rnell'elenco. Puoi seguire lo stesso approccio per altre lingue, come Python, Ruby, ecc. Basta sostituire il cdr nella coppia punteggiata sopra (la parte "src R").

Inoltre, per inserire una linea tra i delimitatori del blocco di origine, è possibile inserire un carattere di nuova riga usando C-q C-j. Cioè, digita src R C-q C-jil cdr della coppia punteggiata sopra. Il risultato sarà simile a:

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

Ora quando premi R, Emacs inserirà il blocco sorgente e posizionerà il cursore tra di loro su una nuova riga ( |sia il punto ):

#+begin_src R
|
#+end_src

4
Il <sbinding esiste ancora, devi solo includerlo (require org-temp)nel tuo init per abilitarlo.
Tyler,

Correzione (require 'org-tempo)
dell'errore di battitura

8

per le combinazioni di tasti per i blocchi di codice, babel-orgprovare quanto segue per associare <rseguito da 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>"))

È inoltre possibile modificare l'origine su ESS.

Per associare <pseguito da a <tab>ad un codice di blocco python, ad esempio:

;; 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 impostato su <elseguito da un <tab>sarà:

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

altri collegamenti utili org-modesono:

(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: " ""))

Potresti spiegare un po 'di più riguardo al fatto che potrei modificare anche la fonte su ESS? Grazie!
Xianwen Chen,

dai un'occhiata a questo link alla pagina di babel R che uso python e Jupyter tramite il einquale dovrebbe supportare anche R.
manandearth

Per la versione org> 9.2, la sintassi sarebbe:(add-to-list 'org-structure-template-alist '("p" . "src python"))
ギ ョ ー ム

2

Dai un'occhiata al pacchetto YASnippet Emacs. Ti consente di aggiungere frammenti di codice con alcune parole chiave e TAB dopo. È molto più semplice e utile sia all'interno della modalità org che con gli script R. Dovresti avere una cartella in .emacs.d / snippets / ess-mode (e una per la modalità org) dove salvi i file in questo modo:

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

Quando si digita TAB, si attacca in% in%, in modo simile:

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

Per aggiungere una nuova combinazione di tasti alla modalità organizzazione, è possibile utilizzare

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

Ciò inserirà la stringa se si preme C-cs.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.