yasnippetsを作成して、適切なモードで組織モードのbabelセクション内のスニペットを展開することはできますか?


10

たとえば、次のような組織モードがあります

#+BEGIN_SRC emacs-lisp


#+END_SRC

すべてのemacs-lisp-modeスニペットをそのブロックの内部では展開できるが、外部では展開できないように、yasnippetsを構成することは可能ですか?


6
「標準的な」方法はC-c 'とにかくそれらのブロックを編集することだと思います-その場合、emacs-lispメジャーモードは、別のウィンドウでブロックを編集しているときに適切なyasnippetスニペットをロードします(これも正しいインデントを処理します)など)
VanLaser 2016

はい、VanLaserの応答に同意します。emacsでサポートされているすべての言語で動作します。
dmg 2016

そうだね。あなたが正しいです。これを応答に追加して、応答を正しいものとしてマークできますか?私はそれについては考えていませんでした:P
Rafa de Castro

回答:


7

2017年1月22日現在、org-src-tab-acts-nativelyおよびを設定した場合org-src-fontify-natively、ソースブロックのTABはブロックの言語のスニペットを展開します。yas-buffer-local-condition組織モードのスニペットがブロックモードのスニペットをシャドウイングしないように設定できます。

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

参照してくださいhttps://github.com/joaotavora/yasnippet/issues/761https://github.com/joaotavora/yasnippet/pull/760


2

これには2つの方法を使用します。バベルヘッダーの作成に役立つ組織スニペットをいくつか用意しています。たとえば、これはBabelのC ++-14ヘッダーを作成します。入力<s C++_して展開します:

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

次に、特定の言語モードに切り替えてその言語のスニペットを使用するCc 'を使用します。次にCc 'を使用してorgファイルに戻ります。それはうまくいきます。


0

npostavsが既に回答しているため、スニペットは1つのorg-modeファイル内の言語に応じて異なる方法で展開されます。

PythonまたはEmacs Lispコードブロック内で「co」と[tab]を入力するだけです。

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

#+BEGIN_SRC emacs-lisp :results value scalar
co[tab]
                                        ; comment
#+END_SRC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.