Чи можливо зробити ясніппети для розширення фрагментів всередині секції органу-органу у відповідному режимі?


10

Наприклад, у мене є режим org, який має таке

#+BEGIN_SRC emacs-lisp


#+END_SRC

Чи можливо налаштувати yasnippets таким чином, щоб усі фрагменти режиму emacs-lisp можна було розширити всередині цього блоку, а не поза ним?


6
Я думаю, що "стандартним" способом було б в C-c 'будь-якому разі редагувати ці блоки - у такому випадку основний режим emacs-lisp мав би відповідні фрагменти yasnippet завантажені під час редагування блоку в його окремому вікні (що також піклується про правильний відступ тощо)
VanLaser

Так, я згоден на відповідь VanLaser. Він працює для будь-якої мови, підтримуваної emacs.
dmg

О правда. Ти правий. Чи можете ви поставити це на відповідь, щоб я позначив вашу відповідь правильною? Я не думав про це: Р
Рафа де Кастро

Відповіді:


7

Станом на 2017 рік, 22 січня, якщо встановити org-src-tab-acts-nativelyі org-src-fontify-natively, тоді TAB у вихідних блоках розширить фрагменти мови блоку. Ви можете встановити yas-buffer-local-conditionзупинку фрагментів режиму org від затінення фрагментів режиму блоку:

(defun my-org-mode-hook ()
  (setq-local yas-buffer-local-condition
              '(not (org-in-src-block-p t))))
(add-hook 'org-mode-hook #'my-org-mode-hook)

Дивіться також https://github.com/joaotavora/yasnippet/isissue/761 , https://github.com/joaotavora/yasnippet/pull/760


2

Для цього я використовую два методи. У мене є кілька фрагментів org, які допоможуть мені створити заголовки вавило. Наприклад, цей створює C ++ - 14 заголовків для Babel. Я набираю <s C++_та розгортаю:

# -*- mode: snippet -*-
# name: c++_header
# key: C++_
# --
C++ :main no :flags -std=c++14 -Wall --pedantic -Werror :results output :exports both
#include <iostream>
int main()
{
   $0

   return 0;
}

Потім я використовую Cc ', який переходить на певний мовний режим і використовую фрагменти для цієї мови. Потім використовуйте Cc ', щоб повернутися до файлу org. Це добре працює.


0

Оскільки npostavs вже відповів, фрагменти розширюються по-різному, залежно від мов у одному файлі org-mode.

Просто введіть "co" та [tab] у блоці коду Python або Emacs Lisp.

#+BEGIN_SRC python :session *Python* :results output
co[tab]
# comment
#+END_SRC

#+BEGIN_SRC emacs-lisp :results value scalar
co[tab]
                                        ; comment
#+END_SRC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.