Як встановити ярлик для # + BEGIN_SRC # + END_SRC?


14

Я прочитав посібник з org-режиму, але не знайшов скорочення для вставки:

#+BEGIN_SRC 
#+END_SRC

Я думаю, що мені потрібно створити конфігурацію в ~ / .emacs, щоб встановити ярлик? Або є ярлик, але я не знав?

Я багато використовую R в emacs. Чи є спосіб створити окремий ярлик для цього?

#+BEGIN_SRC R
#+END_SRC

Відповіді:


22

Org-режим має вбудований механізм для вставлення вихідних блоків. Дивіться прості шаблони в посібнику з Org. Конфігурація за замовчуванням надає шаблони для кількості # + BLOCKS, і ви можете додати свої власні, налаштувавши ‘org-structure-template-alist’.

Наприклад, відкрийте буфер org і введіть, <sTABщоб вставити блок BEGIN / END_SRC.


13
Для org версії 9.2 це не працює для мене поза коробкою. Потрібно (require 'org-tempo)додати до свого .emacs. Також ось оновлене посилання на Easy Templates -> orgmode.org/manual/Easy-templates.html
JMT2080AD

@ JMT2080AD Org 9.2 представив новий функціонал, який вирішує цю проблему. Дивіться мою відповідь нижче: emacs.stackexchange.com/a/47370/15177
Lorem Ipsum

Це , i bв spacemacs?
Гол Джейсона

16

[Це доповнення / уточнення до відповідей @glucas та @manandearth - воно не стоїть самостійно.]

Зауважте, що в останніх версіях розробки (> = 9.2) org-mode (і, отже, якщо все не зміниться, у майбутніх стабільних версіях) org-structure-template-alistзмінився свій тип. Вбудований механізм легких шаблонів був відмовлений на користь більш загального механізму, що базується на tempoпакеті. На жаль, новий механізм дозволяє лише однократні абревіатури після символів <, тому <sбуде розширено до #+BEGIN_SRC...#+END_SRCрядка, на який <elзадається ОП, але такі речі, як у відповіді @ manandearth, НЕ будуть працювати. Це все ще триває робота, тому все може змінитися, але якщо ви перейдете з багатобуквенними <XXXабревіатурами, будьте готові до того, що вони перервуться, коли ви оновите org-mode до такої версії.

Існує також інший механізм: C-c C-,прив'язується до org-insert-structure-templateякого запропонує вам тип блоку, який ви хочете вставити (з меню, яке перелічує всі доступні блоки та дозволяє вибрати одним натисканням клавіші). Його перевага полягає в тому, що він оберне begin/endнавколо регіону, тому якщо ви вже набрали купу матеріалів і хочете загортати їх у блок, все, що вам потрібно зробити, - це вибрати його як регіон та тип, C-c C-.за яким слідує одна таблиця вибрати тип блоку.

Дивіться цю примітку [fn: 1], рядок doc (нової) функції org-insert-structure-templateта файл org-tempo.el .

[fn: 1] Посилання може бути неточним, оскільки вказує на фіксований рядок у файлі, який може (не, буде!) змінюватися. Якщо посилання не приведе вас у потрібне місце, знайдіть рядок "Розширення шаблону структури" - і сміливо відредагуйте цю відповідь та зафіксуйте номер рядка - дякую!


Одна річ , яку я вважаю за краще про C-c C-,більш ніж в <sтому , що вона дозволяє вибрати текст і «обгортка» його навколо шаблону структури, просто набравши C-c C-,. За допомогою <sвас потрібно вирізати і вставити лінію, яка закінчує шаблон (тобто, the #+END_SRC).
SaMeji

Так, це я згадую у відповіді.
NickD

14

Поведінка вихідного блоку змінюється в Org 9.2 . Абревіатура <sбільше не працює за замовчуванням. Натомість ви використовуєте C-c C-,які дзвінки org-insert-structure-template.

Додавання вихідного блоку

Натискання C-c C-,відкриває діалогове вікно. Натисніть, TABа потім введіть src R. Це вставляє вихідний блок і ставить курсор на початок другого рядка (нехай |буде точка ):

#+begin_src R
|#+end_src

Щоб потім редагувати всередині блоку, натисніть, C-oщоб відкрити новий рядок.

Ви можете зберегти шаблон, додавши запис до org-structure-template-alist. Помістіть наступне десь у своєму init.elабо запустіть його, використовуючи C-x C-e:

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

Тепер, коли ви це зробите, C-c C-,ви побачите запис rу списку. Ви можете дотримуватися того ж підходу для інших мов, таких як Python, Ruby тощо. Просто замініть cdr у пунктирній парі вище (частина "src R").

Крім того, щоб вставити рядок між роздільниками вихідного блоку, ви можете вставити символ нового рядка, використовуючи C-q C-j. Тобто, типу src R C-q C-jв корд з пунктирною пари вище. Результат виглядатиме так:

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

Тепер, коли ви натиснете R, Emacs вставить вихідний блок і помістить курсор між ними на новий рядок (нехай |буде точка ):

#+begin_src R
|
#+end_src

4
<sЗв'язування все ще існує, потрібно просто включити (require org-temp)в вашій ініціалізації , щоб включити його.
Тайлер

Виправлення помилок (require 'org-tempo)
друку

8

для ключових прив’язок для блоків коду babel-orgспробуйте наступне, щоб прив’язати, <rа потім <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>"))

Ви також можете змінити джерело в ESS.

Наприклад, для прив’язки, <pа потім <tab>блочного коду python, наприклад:

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

набір emacs-lisp, за <elяким слідує <tab>заповіт, буде:

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

Іншими корисними прив'язками org-modeє:

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

Чи можете ви пояснити трохи більше стосовно того, що я можу також змінити джерело на ESS? Дякую!
Xianwen Chen

подивіться на це посилання на сторінку Babel R, я використовую ноутбук python та Jupyter, через einякий також слід підтримувати R.
manandearth

Для org-версії> 9.2, синтаксис буде таким:(add-to-list 'org-structure-template-alist '("p" . "src python"))
ギ ョ ー ム

2

Погляньте на пакет YASnippet Emacs. Це дозволяє додавати фрагменти коду з деякими ключовими словами та TAB після. Це набагато простіше і корисніше як в режимі org, так і з R-сценаріями. У вас повинна бути папка в .emacs.d / snippets / ess-mode (і одна в org-режимі), де ви зберігаєте такі файли:

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

Коли ви вводите TAB, він вписується у% у%, аналогічно:

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

Щоб додати нову комбінацію клавіш до org-режиму, ви можете використовувати

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

Це буде вставити рядок, якщо натиснути C-cs.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.