Jak ustawić skrót dla # + BEGIN_SRC # + END_SRC?

14

Przeczytałem instrukcję trybu org, ale nie znalazłem skrótu do wstawienia:

#+BEGIN_SRC 
#+END_SRC

Chyba muszę utworzyć konfigurację w ~ / .emacs, aby ustawić skrót? Czy istnieje skrót, ale nie wiedziałem?

Używam R dużo w emacs. Czy istnieje sposób utworzenia osobnego skrótu, aby go utworzyć?

#+BEGIN_SRC R
#+END_SRC
Xianwen Chen
źródło

Odpowiedzi:

22

Tryb Org ma wbudowany mechanizm wstawiania bloków źródłowych. Zobacz Proste szablony w podręczniku Org. Domyślna konfiguracja zapewnia szablony dla wielu # BLOKÓW, a także możesz dodać własne, dostosowując ‘org-structure-template-alist’.

Na przykład otwórz bufor organizacji i wpisz, <sTABaby wstawić blok BEGIN / END_SRC.

glucas
źródło
13
W przypadku wersji org 9.2 nie działa to dla mnie po wyjęciu z pudełka. Musisz (require 'org-tempo)dodać do swojego .emacs. Ponadto tutaj znajduje się zaktualizowany link do łatwych szablonów -> orgmode.org/manual/Easy-templates.html
JMT2080AD
@ JMT2080AD Org 9.2 wprowadził nową funkcjonalność, która rozwiązuje ten problem. Zobacz moją odpowiedź poniżej: emacs.stackexchange.com/a/47370/15177
Lorem Ipsum
Czy to , i bw spacemacs?
Jason Gol
16

[Jest to uzupełnienie / wyjaśnienie odpowiedzi @glucas i @manandearth - nie jest samo w sobie.]

Zauważ, że w ostatnich wersjach programistycznych (> = 9.2) trybu org (i dlatego, chyba że coś się zmieni, w przyszłych stabilnych wersjach) org-structure-template-alistzmienił swój typ. Wbudowany mechanizm łatwych szablonów został porzucony na rzecz bardziej ogólnego mechanizmu opartego na tempopakiecie. Niestety nowy mechanizm dopuszcza tylko skróty pojedynczych znaków po <, więc <szostanie rozszerzony do #+BEGIN_SRC...#+END_SRCciągu, o który prosi OP, ale rzeczy takie jak <elw odpowiedzi @ manandearth NIE będą działać. Wciąż jest to praca w toku, więc rzeczy mogą się zmienić, ale jeśli używasz wieloliterowych <XXXskrótów, przygotuj się na ich zerwanie po uaktualnieniu trybu org do takiej wersji.

Istnieje również inny mechanizm: C-c C-,jest powiązany z org-insert-structure-templatemonitem o rodzaj bloku, który chcesz wstawić (z menu, które zawiera listę wszystkich dostępnych bloków i pozwala wybrać za jednym naciśnięciem klawisza). Jego zaletą jest to, że będzie owijał begin/endwokół regionu, więc jeśli już wpisałeś kilka rzeczy i chcesz owinąć go w blok, wszystko co musisz zrobić, to wybrać go jako region i wpisać C-c C-.pojedynczy znak wybrać rodzaj bloku.

Zobacz tę notatkę [fn: 1], ciąg dokumentów funkcji (nowej) org-insert-structure-templatei plik org-tempo.el .

[fn: 1] Link może być niedokładny, ponieważ wskazuje na stały numer linii w pliku, który może (nie, zmieni się!). Jeśli link nie zabierze Cię we właściwe miejsce, wyszukaj ciąg „rozwinięcie szablonu struktury” - możesz edytować tę odpowiedź i naprawić numer linii - dzięki!

NickD
źródło
Jedną z rzeczy, o których wolę C-c C-,ponad, <sjest to, że pozwala on wybrać tekst i „owinąć” go wokół szablonu struktury, po prostu wpisując C-c C-,. Z <smusisz wyciąć i wkleić linię, która kończy szablon (tj #+END_SRC.).
SaMeji
Tak, wspominam o tym w odpowiedzi.
NickD
14

Zachowanie bloku źródło zmieniane w Org 9,2 . Skrót <snie działa już domyślnie. Zamiast tego używasz, C-c C-,które połączenia org-insert-structure-template.

Dodanie bloku źródłowego

Naciśnięcie powoduje C-c C-,otwarcie okna dialogowego. Naciśnij, TABa następnie wprowadź src R. To wstawia blok źródłowy i umieszcza kursor na początku drugiej linii (niech |będzie punkt ):

#+begin_src R
|#+end_src

Aby następnie edytować wewnątrz bloku, naciśnij, C-oaby otworzyć nowy wiersz.

Możesz zapisać szablon, dodając wpis do org-structure-template-alist. Umieść gdzieś w swoim miejscu init.ellub uruchom go za pomocą C-x C-e:

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

Teraz, gdy to zrobisz C-c C-,, zobaczysz pozycję na rliście. Możesz zastosować to samo podejście dla innych języków, takich jak Python, Ruby itp. Po prostu zastąp cdr w kropkowanej parze powyżej (część „src R”).

Dodatkowo, aby wstawić linię między ogranicznikami bloku źródłowego, możesz wstawić znak nowej linii za pomocą C-q C-j. Oznacza to, wpisać src R C-q C-jw CDR z przerywaną pary powyżej. Wynik będzie wyglądał następująco:

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

Teraz, kiedy naciśniesz R, Emacs wstawi blok źródłowy i umieści kursor między nimi w nowej linii (niech |będzie punkt ):

#+begin_src R
|
#+end_src
Lorem Ipsum
źródło
4
<sWiążące nadal istnieje, wystarczy włączyć (require org-temp)w init, aby ją włączyć.
Tyler
Korekta literówek:(require 'org-tempo)
NickD
8

dla powiązań klawiszy dla bloków kodu, babel-orgspróbuj wykonać następujące czynności, <ra następnie <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>"))

Możesz również zmodyfikować źródło do ESS.

Aby powiązać, <pa następnie a <tab>, kod bloku python, na przykład:

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

zestaw emacs-lisp, <elpo którym następuje, <tab>będzie:

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

inne przydatne wiązania org-modeto:

(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
źródło
Czy mógłbyś wyjaśnić coś więcej na temat tego, że mógłbym również zmodyfikować źródło w ESS? Dzięki!
Xianwen Chen
spójrz na ten link do strony babel R Używam Pythona i notesu Jupyter, przez einktóre powinien również obsługiwać R.
manandearth
W przypadku wersji org> 9.2 składnia wyglądałaby następująco:(add-to-list 'org-structure-template-alist '("p" . "src python"))
ギ 13: ー ム
2

Zobacz pakiet YASnippet Emacs. Pozwala dodawać fragmenty kodu z niektórymi słowami kluczowymi i TAB po. Jest to o wiele prostsze i przydatne zarówno w trybie org, jak i ze skryptami R. Powinieneś mieć folder w .emacs.d / snippets / ess-mode (i jeden dla trybu org), w którym zapisujesz takie pliki:

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

Gdy wpiszesz TAB, będzie się on pojawiał w% w%, podobnie:

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

Zamieć
źródło
1

Aby dodać nową kombinację klawiszy do trybu organizacji, możesz użyć

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

Spowoduje to wstawienie ciągu, jeśli naciśniesz C-cs.

choroba
źródło