Na przykład mam tryb organizacji, który ma następujące
#+BEGIN_SRC emacs-lisp
#+END_SRC
Czy można skonfigurować yasnippety w taki sposób, aby wszystkie fragmenty trybu emacs-lisp mogły zostać rozszerzone wewnątrz tego bloku, ale nie poza nim?
Na przykład mam tryb organizacji, który ma następujące
#+BEGIN_SRC emacs-lisp
#+END_SRC
Czy można skonfigurować yasnippety w taki sposób, aby wszystkie fragmenty trybu emacs-lisp mogły zostać rozszerzone wewnątrz tego bloku, ale nie poza nim?
Odpowiedzi:
Począwszy od 2017 roku, 22 stycznia, jeśli ustawisz org-src-tab-acts-natively
i org-src-fontify-natively
, a następnie TAB w blokach źródłowych rozszerzy fragmenty języka bloku. Możesz ustawić yas-buffer-local-condition
opcję zatrzymywania fragmentów kodu w trybie organizacji przed zacieniowaniem fragmentów kodu trybu blokowego:
(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)
Zobacz także https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760
Używam do tego dwóch metod. Mam fragmenty organizacji, które pomagają mi tworzyć nagłówki babel. Na przykład ten tworzy C ++ - 14 nagłówków dla Babel. Piszę <s C++_
i rozwijam:
# -*- 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;
}
Następnie używam Cc ', który przełącza się w tryb konkretnego języka i używam fragmentów dla tego języka. Następnie użyj Cc ', aby wrócić do pliku org. To dobrze działa.
Ponieważ npostavs już odpowiedziały, fragmenty są rozwijane w różny sposób w zależności od języków w jednym pliku trybu org.
Wystarczy wpisać „co” i [tab] w bloku kodu Python lub 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
C-c '
- w takim przypadku tryb główny emacs-lisp miałby załadowane odpowiednie fragmenty yasnippet podczas edycji bloku w osobnym oknie (co również dba o właściwe wcięcie itp.)