Ist es möglich, Yasnippets zu erstellen, um Snippets innerhalb eines Babel-Abschnitts im Organisationsmodus im entsprechenden Modus zu erweitern?

10

Zum Beispiel habe ich einen Organisationsmodus, der Folgendes hat

#+BEGIN_SRC emacs-lisp


#+END_SRC

Ist es möglich, Yasnippets so zu konfigurieren, dass alle Emacs-Lisp-Modus-Snippets innerhalb dieses Blocks erweitert werden können, jedoch nicht außerhalb?

Rafa de Castro
quelle
6
Ich denke, der "Standard" Weg wäre, diese Blöcke C-c 'trotzdem zu bearbeiten - in diesem Fall würde der Emacs-Lisp-Major-Modus die entsprechenden Yasnippet-Snippets laden, während der Block in seinem separaten Fenster bearbeitet wird (das kümmert sich auch um die richtige Einrückung usw.)
VanLaser
Ja, ich stimme der Antwort von VanLaser zu. Es funktioniert für jede Sprache, die von Emacs unterstützt wird.
dmg
Oh, das ist wahr. Du hast recht. Können Sie dies auf eine Antwort setzen, damit ich Ihre Antwort als richtig markiere? Daran habe ich nicht gedacht: P
Rafa de Castro

Antworten:

7

Ab 2017, 22. Januar, wenn Sie festgelegt org-src-tab-acts-nativelyund org-src-fontify-nativelydann TAB in Quellenblöcke werden Auszüge , die Sprache des Block erweitern. Möglicherweise möchten Sie festlegen yas-buffer-local-condition, dass Snipppets im Organisationsmodus die Snippets des Blockmodus nicht mehr überschatten:

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

Siehe auch https://github.com/joaotavora/yasnippet/issues/761 , https://github.com/joaotavora/yasnippet/pull/760

npostavs
quelle
2

Ich benutze dafür zwei Methoden. Ich habe einige Org-Schnipsel, die mir beim Erstellen der Babel-Header helfen. In diesem Beispiel werden C ++ - 14-Header für Babel erstellt. Ich tippe <s C++_und erweitere:

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

Dann benutze ich Cc ', das in den spezifischen Sprachmodus wechselt und die Snippets für diese Sprache verwende. Verwenden Sie dann Cc ', um zur Organisationsdatei zurückzukehren. Es funktioniert gut.

dmg
quelle
0

Da npostavs bereits geantwortet haben, werden Snippets je nach Sprache in einer Organisationsmodusdatei unterschiedlich erweitert.

Geben Sie einfach "co" und [tab] in den Python- oder Emacs Lisp-Codeblock ein.

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

#+BEGIN_SRC emacs-lisp :results value scalar
co[tab]
                                        ; comment
#+END_SRC
RUserPassingBy
quelle