# + BEGIN_SRC # + END_SRC의 바로 가기를 설정하는 방법은 무엇입니까?


14

나는 org-mode 매뉴얼을 읽었지만 지름길을 찾지 못했습니다.

#+BEGIN_SRC 
#+END_SRC

단축키를 설정하려면 ~ / .emacs에 구성을 만들어야한다고 생각합니까? 아니면 지름길이 있지만 몰랐습니까?

저는 이맥스에서 R을 많이 사용합니다. 이것을 만들기 위해 별도의 바로 가기를 만드는 방법이 있습니까?

#+BEGIN_SRC R
#+END_SRC

답변:


22

조직 모드에는 소스 블록을 삽입하기위한 메커니즘이 내장되어 있습니다. 조직 매뉴얼의 쉬운 템플릿 을 참조하십시오 . 기본 구성은 다수의 # + BLOCKS에 대한 템플릿을 제공하며을 사용자 정의하여 직접 추가 할 수 있습니다 ‘org-structure-template-alist’.

예를 들어, 조직 버퍼를 열고 <sTABBEGIN / END_SRC 블록을 삽입하려면 입력하십시오.


13
org 버전 9.2의 경우 즉시 사용할 수 없습니다. 에 (require 'org-tempo)추가해야합니다 .emacs. > - 또한, 여기에 쉬운 템플릿에 업데이트 된 링크입니다 orgmode.org/manual/Easy-templates.html
JMT2080AD

@ JMT2080AD Org 9.2는이를 해결하는 새로운 기능을 도입했습니다. 아래 내 답변을 참조하십시오 : emacs.stackexchange.com/a/47370/15177
Lorem Ipsum

그것은인가 , i bspacemacs?
Jason Goal

16

[이것은 @glucas와 @manandearth의 답변에 대한 추가 / 설명입니다-그것은 독자적으로 서 있지 않습니다.]

org-mode의 최신 개발 버전 (> = 9.2)에서 (따라서 향후 안정적인 버전에서 상황이 변경되지 않는 한) org-structure-template-alist유형이 변경되었습니다. 내장 된 쉬운 템플릿 메커니즘은 tempo패키지를 기반으로 한보다 일반적인 메커니즘을 선호하여 포기되었습니다 . 불행히도 새로운 메커니즘은의 뒤에 단일 문자 약어 만 허용 <하므로 OP가 요구 <s하는 #+BEGIN_SRC...#+END_SRC문자열 로 확장 되지만 <el@manandearth의 답변 과 같은 것은 작동 하지 않습니다 . 이것은 여전히 ​​진행중인 작업이므로 상황이 변경 될 수 있지만 다중 문자 <XXX약어를 사용하는 경우 조직 모드를 해당 버전으로 업그레이드 할 때 중단 될 수 있도록 준비하십시오.

:이 또 다른 메커니즘은 또한 C-c C-,에 바인딩 org-insert-structure-template삽입 할 블록의 종류에 대해 어떤 메시지를 (그 목록 가능한 모든 블록 메뉴와 함께 당신은 하나의 키 프레스로 선택할 수 있습니다). 장점은 begin/end영역 주위 를 감싸는 것이므로 이미 많은 항목을 입력하고 블록으로 묶으려면 영역과 유형으로 선택한 C-c C-.다음 단일 문자를 사용하면됩니다. 블록 유형을 선택하십시오.

참조 이 메모 의 (새) 함수의 문서화 문자열 : [1 FN] org-insert-structure-template파일을 org-tempo.el .

[fn : 1] 링크가 파일에서 수정 된 줄 번호를 가리 키므로 정확하지 않을 수 있습니다 (나일 것입니다!). 링크가 올바른 위치로 이동하지 않으면 문자열 "구조 템플릿 확장"을 검색하고이 답변을 편집하여 줄 번호를 수정하십시오. 감사합니다.


나는에 대한 선호 한 가지 C-c C-,이상은 <s당신이 단순히 입력하여 구조 템플릿 주위에 텍스트와 "랩"을 선택 할 수 있다는 것입니다 C-c C-,. 으로 <s당신이 선을 잘라 붙여 넣을 필요가 끝 템플릿 (즉, #+END_SRC).
SaMeji

예, 대답에서 언급합니다.
NickD

14

소스 블록의 동작은 조직 9.2에서 변경 . 약어 <s는 더 이상 기본적으로 작동하지 않습니다. 대신 C-c C-,어떤 호출 을 사용 합니다 org-insert-structure-template.

소스 블록 추가

를 누르면 C-c C-,대화 상자가 나타납니다. 를 눌러 TAB다음 enter src R. 이 삽입 소스 블록과 풋 두 번째 줄의 시작에 커서 (수 있도록 | ) :

#+begin_src R
|#+end_src

그런 다음 블록 내부를 편집하려면을 눌러 C-o새 줄을 엽니 다.

에 항목을 추가하여 템플릿을 저장할 수 있습니다 org-structure-template-alist. 다음을 어딘가에 init.el놓거나 사용하여 실행하십시오 C-x C-e.

(add-to-list 'org-structure-template-alist '("r" . "src R"))

이제 목록에 C-c C-,항목 r이 표시됩니다. Python, Ruby 등과 같은 다른 언어에 대해서도 동일한 방법을 사용할 수 있습니다. 위 의 점선 쌍 ( "src R"부분) 으로 cdr 을 바꾸십시오 .

또한 소스 블록 구분 기호 사이에 줄을 삽입하려면을 사용하여 줄 바꿈 문자를 삽입 할 수 있습니다 C-q C-j. 즉, 위 의 점선 쌍src R C-q C-jcdr 을 입력 하십시오 . 결과는 다음과 같습니다.

(add-to-list 'org-structure-template-alist '("R" . "src R
"))

누를 때 지금 R, 이맥스는 소스 블록을 삽입하고 (LET 새 줄에 그들 사이에 커서를 넣어 | ) :

#+begin_src R
|
#+end_src

4
<s바인딩 여전히 당신은 단지 포함해야 존재 (require org-temp)를 활성화하려면 초기화에.
Tyler

오타 수정 :(require 'org-tempo)
NickD

8

코드 블록의 키 바인딩의 babel-org경우 다음을 시도하여 바인드 <r하십시오 <tab>.

;; add <r for R expansion
(add-to-list 'org-structure-template-alist
         '("p" "#+BEGIN_SRC r :results output org drawer\n?\n#+END_SRC"
           "<src lang=\"r\">\n?\n</src>"))

소스를 ESS로 수정할 수도 있습니다.

<p다음에 a <tab>를 파이썬 블록 코드에 바인드하려면 :

;; add <p for python expansion
(add-to-list 'org-structure-template-alist
         '("p" "#+BEGIN_SRC python :results output org drawer\n?\n#+END_SRC"
           "<src lang=\"python\">\n?\n</src>"))

emacs-lisp <el다음에 a <tab>가 붙습니다 :

;; add <el for emacs-lisp expansion
(add-to-list 'org-structure-template-alist
         '("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC"
           "<src lang=\"emacs-lisp\">\n?\n</src>"))

다른 유용한 바인딩 org-mode은 다음 과 같습니다.

(add-to-list 'org-structure-template-alist
         '("ao" "#+attr_org: " ""))

(add-to-list 'org-structure-template-alist
         '("al" "#+attr_latex: " ""))

(add-to-list 'org-structure-template-alist
         '("ca" "#+caption: " ""))

(add-to-list 'org-structure-template-alist
         '("tn" "#+tblname: " ""))

(add-to-list 'org-structure-template-alist
         '("n" "#+name: " ""))

(add-to-list 'org-structure-template-alist
         '("o" "#+options: " ""))

(add-to-list 'org-structure-template-alist
         '("ti" "#+title: " ""))

소스를 ESS로 수정할 수 있다는 것에 대해 좀 더 설명해 주시겠습니까? 감사!
Xianwen Chen

python 및 Jupyter 노트북을 사용 하는 babel R 페이지에 대한 링크를 보고 Rein 을 지원해야합니다.
manandearth

org-version> 9.2의 경우 구문은 다음과 같습니다.(add-to-list 'org-structure-template-alist '("p" . "src python"))
ギ ム ム

2

YASnippet Emacs 패키지를 살펴보십시오. 일부 키워드와 TAB을 사용하여 코드 스 니펫을 추가 할 수 있습니다. 조직 모드와 R 스크립트 모두에서 훨씬 간단하고 유용합니다. .emacs.d / snippets / ess-mode (및 org-mode) 폴더에 다음과 같은 파일을 저장하는 폴더가 있어야합니다.

    # -*- mode: snippet -*-
    # name: in
    # key: in
    # -- 
    %in% 

Tab을 입력하면 다음과 같이 % in %로 고정됩니다.

# -*- mode: snippet -*-
# name: source_r
# key: srcr_
# --
#+BEGIN_SRC R 
$0
#+END_SRC

https://www.emacswiki.org/emacs/Yasnippet

https://joaotavora.github.io/yasnippet/snippet-development.html


1

조직 모드에 새 키 조합을 추가하려면

(define-key org-mode-map "\C-cs" 
    (lambda()(interactive)(insert "#+BEGIN_SRC R\n#+END_SRC")))

를 누르면 문자열이 삽입됩니다 C-cs.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.