적절한 모드에서 org-mode babel 섹션 내에서 스 니펫을 확장하기 위해 yasnippet을 만들 수 있습니까?


10

예를 들어 다음과 같은 조직 모드가 있습니다.

#+BEGIN_SRC emacs-lisp


#+END_SRC

모든 emacs-lisp-mode 스 니펫을 블록 외부로 확장 할 수 있지만 외부에서는 확장 할 수없는 방식으로 yasnippet을 구성 할 수 있습니까?


6
"표준"방법은 C-c '어쨌든 해당 블록을 편집하는 것이라고 생각합니다 .이 경우 emacs-lisp 주요 모드에는 별도의 창에서 블록을 편집하는 동안 적절한 yasnippet 스 니펫이로드됩니다 (올바른 들여 쓰기도 처리합니다) 등)
VanLaser

예, VanLaser의 답변에 동의합니다. emacs가 지원하는 모든 언어에서 작동합니다.
dmg

아 맞다 네 말이 맞아 응답에 올바른 답변을 표시 할 수 있습니까? 나는 그것에 대해 생각하지 않았다 : P
라파 데 카스트로

답변:


7

당신이 설정 한 경우 2017 기준으로 월 22, org-src-tab-acts-nativelyorg-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/761 , https://github.com/joaotavora/yasnippet/pull/760


2

나는 이것을 위해 두 가지 방법을 사용합니다. babel 헤더를 만드는 데 도움이되는 몇 가지 조직 스 니펫이 있습니다. 예를 들어, 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

npostav가 이미 응답 했으므로 스 니펫은 하나의 조직 모드 파일 내의 언어에 따라 다르게 확장됩니다.

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.