É possível criar yasnippets para expandir trechos dentro de uma seção babel do modo organizacional no modo apropriado?


10

Por exemplo, eu tenho um modo organizacional que possui o seguinte

#+BEGIN_SRC emacs-lisp


#+END_SRC

É possível configurar o yasnippets de tal maneira que todos os snippets do modo emacs-lisp possam ser expandidos dentro desse bloco, mas não fora dele?


6
Eu acho que a maneira "padrão" seria editar esses blocos de C-c 'qualquer maneira - nesse caso, o modo principal do emacs-lisp teria os trechos de yasnippet apropriados carregados ao editar o bloco em sua janela separada (que também cuida da indentação correta etc)
— VanLaser 11/09/16

Sim, concordo com a resposta do VanLaser. Funciona para qualquer idioma suportado pelo emacs.
— Dmg

Oh verdade. Você está certo. Você pode colocar isso em uma resposta para marcar sua resposta como correta? Não pensei nisso: P
— Rafa de Castro

Respostas:


7

A partir de 2017, 22 de janeiro, se você definir org-src-tab-acts-nativelye org-src-fontify-natively, em seguida, a TAB nos blocos de origem expandirá trechos do idioma do bloco. Convém definir yas-buffer-local-conditionpara impedir que os snipppets do modo organizacional ocultem os snippets do modo de bloco:

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

Consulte também https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760


2

Eu uso dois métodos para isso. Tenho alguns trechos da organização para me ajudar a criar os cabeçalhos de babel. Por exemplo, este cria cabeçalhos C ++ - 14 para Babel. Digito <s C++_e expiro:

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

Então eu uso Cc ', que alterna para o modo de idioma específico e usa os trechos para esse idioma. Em seguida, use Cc 'para voltar ao arquivo organizacional. Isso funciona bem.


0

Como os npostavs já responderam, os snippets são expandidos de maneira diferente, dependendo dos idiomas em um arquivo de modo organizacional.

Basta digitar "co" e [tab] no bloco de código Python ou 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.