È possibile creare yasnippet per espandere snippet all'interno di una sezione babel in modalità org nella modalità appropriata?


10

Ad esempio ho una modalità org che ha i seguenti

#+BEGIN_SRC emacs-lisp


#+END_SRC

È possibile configurare yasnippet in modo tale che tutti gli snippet in modalità emacs-lisp possano essere espansi all'interno di quel blocco ma non all'esterno?


6
Penso che il modo "standard" sarebbe quello di modificare quei blocchi con C-c 'comunque - in quel caso, la modalità principale emacs-lisp avrebbe i frammenti yasnippet appropriati caricati mentre si modifica il blocco nella sua finestra separata (che si occupa anche della giusta rientranza ecc.)
VanLaser,

Sì, sono d'accordo sulla risposta di VanLaser. Funziona con qualsiasi lingua supportata da emacs.
dmg

Oh vero Hai ragione. Puoi inserire questo in una risposta in modo da contrassegnare la tua risposta come corretta? Non ci ho pensato: P
Rafa de Castro,

Risposte:


7

A partire dal 2017, il 22 gennaio, se si imposta org-src-tab-acts-nativelye org-src-fontify-natively, quindi TAB nei blocchi di origine espanderà frammenti della lingua del blocco. Potresti voler impostare yas-buffer-local-conditionper impedire agli snippet della modalità org di oscurare gli snippet della modalità blocco:

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

Vedi anche https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760


2

Uso due metodi per questo. Ho alcuni frammenti di org per aiutarmi a creare le intestazioni delle babele. Ad esempio, questo crea intestazioni C ++ - 14 per Babele. Scrivo <s C++_ed espando:

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

Quindi uso Cc 'che passa alla modalità lingua specifica e uso i frammenti per quella lingua. Quindi utilizzare Cc 'per tornare al file org. Funziona bene.


0

Poiché npostavs ha già risposto, gli snippet vengono espansi in modo diverso a seconda delle lingue all'interno di un file in modalità organizzazione.

Digita "co" e [tab] all'interno del blocco di codice Python o 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.