¿Cómo establecer un atajo para # + BEGIN_SRC # + END_SRC?

14

Leí el manual del modo org pero no encontré un atajo para insertar:

#+BEGIN_SRC 
#+END_SRC

¿Supongo que necesito crear una configuración en ~ / .emacs para establecer un acceso directo? O, ¿hay un atajo pero no lo sabía?

Yo uso mucho R en emacs. ¿Hay alguna manera de crear un acceso directo separado para crear esto?

#+BEGIN_SRC R
#+END_SRC
Xianwen Chen
fuente

Respuestas:

21

Org-mode tiene un mecanismo incorporado para insertar bloques de origen. Consulte Plantillas fáciles en el manual Org. La configuración predeterminada proporciona plantillas para varios BLOQUES # +, y puede agregar las suyas personalizando ‘org-structure-template-alist’.

Por ejemplo, abra un búfer de organización y escriba <sTABpara insertar un bloque BEGIN / END_SRC.

glucas
fuente
13
Para la versión 9.2 de la organización, esto no funciona para mí fuera de la caja. Necesitas haber (require 'org-tempo)agregado a tu .emacs. Además, aquí hay un enlace actualizado a Plantillas fáciles -> orgmode.org/manual/Easy-templates.html
JMT2080AD
@ JMT2080AD Org 9.2 introdujo una nueva funcionalidad que aborda esto. Vea mi respuesta a continuación: emacs.stackexchange.com/a/47370/15177
Lorem Ipsum el
¿Está , i badentro spacemacs?
Jason Goal
15

[Esta es una adición / aclaración a las respuestas de @glucas y @manandearth, no se sostiene por sí sola.]

Tenga en cuenta que en versiones de desarrollo recientes (> = 9.2) de org-mode (y, por lo tanto, a menos que las cosas cambien, en futuras versiones estables), org-structure-template-alistha cambiado su tipo. El mecanismo integrado de plantillas fáciles se ha abandonado en favor de un mecanismo más genérico basado en el tempopaquete. Desafortunadamente, el nuevo mecanismo solo permite abreviaturas de un solo carácter después de <, por <slo que se expandirá a la #+BEGIN_SRC...#+END_SRCcadena que el OP solicita, pero cosas como <elen la respuesta de @ manandearth NO funcionarán. Esto todavía es un trabajo en progreso, por lo que las cosas pueden cambiar, pero si usa <XXXabreviaturas de varias letras , prepárese para que se rompan cuando actualice el modo org a dicha versión.

También hay otro mecanismo: C-c C-,está vinculado a lo org-insert-structure-templateque le solicita el tipo de bloque que desea insertar (con un menú que enumera todos los bloques disponibles y le permite elegir con solo presionar una tecla). Su ventaja es que envolverá la begin/endregión, así que si ya ha escrito un montón de cosas y desea envolverlo en un bloque, todo lo que tiene que hacer es seleccionarlo como una región y escribir C-c C-.seguido de un solo carácter para elegir el tipo de bloque.

Consulte esta nota [fn: 1], la cadena de documentación de la función (nueva) org-insert-structure-templatey el archivo org-tempo.el .

[fn: 1] El enlace puede ser inexacto porque apunta a un número de línea fija en un archivo que puede (¡no, lo hará!) cambiar. Si el enlace no lo lleva al lugar correcto, busque la cadena "expansión de plantilla de estructura", y siéntase libre de editar esta respuesta y corregir el número de línea, ¡gracias!

NickD
fuente
12

El comportamiento del bloque fuente cambió en Org 9.2 . La abreviatura <sya no funciona por defecto. En cambio, usas C-c C-,qué llamadas org-insert-structure-template.

Agregar un bloque fuente

Al presionar, C-c C-,aparece un cuadro de diálogo. Presione TABy luego entre src R. Se inserta un bloque de origen y pone el cursor al comienzo de la segunda línea (dejar que |sea el punto ):

#+begin_src R
|#+end_src

Para editar dentro del bloque, presione C-opara abrir una nueva línea.

Puede guardar una plantilla agregando una entrada al org-structure-template-alist. Ponga lo siguiente en algún lugar init.elo ejecútelo usando C-x C-e:

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

Ahora, cuando lo haga C-c C-,, verá una entrada ren la lista. Puede seguir el mismo enfoque para otros lenguajes, como Python, Ruby, etc. Simplemente reemplace el cdr en el par de puntos de arriba (la parte "src R").

Además, para insertar una línea entre los delimitadores de bloque de origen, puede insertar un carácter de nueva línea utilizando C-q C-j. Es decir, escriba src R C-q C-jel cdr del par de puntos anterior. El resultado se verá así:

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

Ahora bien, cuando se pulsa R, Emacs inserte el bloque de origen y poner el cursor entre ellos en una nueva línea (vamos a |ser punto ):

#+begin_src R
|
#+end_src
Lorem Ipsum
fuente
44
El <senlace aún existe, solo necesita incluirlo (require org-temp)en su init para habilitarlo.
Tyler el
Corrección de (require 'org-tempo)
error tipográfico
8

para las asociaciones de teclas para bloques de código, babel-orgintente lo siguiente para vincular <rseguido de 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>"))

También puede modificar la fuente a ESS.

Para enlazar <pseguido de a <tab>a un código de bloque de python, por ejemplo:

;; 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 conjunto de emacs-lisp <elseguido de a <tab>será:

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

Otros enlaces útiles en org-modeson:

(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
fuente
¿Podría explicar un poco más sobre que yo también podría modificar la fuente a ESS? ¡Gracias!
Xianwen Chen
Eche un vistazo a este enlace a la página R de Babel . Uso Python y el cuaderno Jupyter a través del eincual también debería admitir R.
manandearth
Para org-version> 9.2, la sintaxis sería:(add-to-list 'org-structure-template-alist '("p" . "src python"))
ギ ョ ー ム
2

Echa un vistazo al paquete YASnippet Emacs. Le permite agregar fragmentos de código con algunas palabras clave y TAB después. Es mucho más simple y útil tanto para el modo de organización como para los scripts R. Debería tener una carpeta en .emacs.d / snippets / ess-mode (y una para org-mode) donde guarde archivos como este:

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

Cuando escribe TAB, se pega en% en%, de manera similar:

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

Una tormenta de nieve
fuente
1

Para agregar una nueva combinación de teclas al modo org, puede usar

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

Esto insertará la cadena si presiona C-cs.

choroba
fuente