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?


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


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.