È 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.