#+ BEGIN_SRC#+ END_SRCのショートカットを設定するにはどうすればよいですか?


14

組織モードのマニュアルを読みましたが、挿入するショートカットが見つかりませんでした。

#+BEGIN_SRC 
#+END_SRC

ショートカットを設定するために〜/ .emacsに設定を作成する必要があると思いますか?または、ショートカットはありますが、知りませんでしたか?

私はemacsでRをたくさん使用しています。これを作成する別のショートカットを作成する方法はありますか?

#+BEGIN_SRC R
#+END_SRC

回答:


21

Org-modeには、ソースブロックを挿入するための組み込みメカニズムがあります。組織マニュアルのEasy Templatesを参照してください。デフォルトの設定では、多くの#+ BLOCKSのテンプレートが提供されており、をカスタマイズして独自のテンプレートを追加できます‘org-structure-template-alist’

たとえば、組織バッファーを開い<sTABて入力し、BEGIN / END_SRCブロックを挿入します。


13
組織バージョン9.2の場合、これはそのままでは機能しません。をに(require 'org-tempo)追加する必要があります.emacs。また、ここにEasy Templates-> orgmode.org/manual/Easy-templates.html
JMT2080AD

@ JMT2080AD Org 9.2は、これに対処する新しい機能を導入しました。以下の私の答えを参照してください:emacs.stackexchange.com/a/47370/15177
Lorem

それはある, i bspacemacs
Jasonゴール

15

[これは@glucasと@manandearthによる回答への追加/明確化です-それ自体では成り立ちません。]

org-modeの最近の開発バージョン(> = 9.2)では(したがって、将来の安定バージョンで変更がない限り)org-structure-template-alistタイプが変更されていることに注意してください。組み込みの簡単なテンプレートメカニズムは、tempoパッケージに基づくより一般的なメカニズムのために放棄されました。残念ながら、この新しいメカニズムでは<、の後の1文字の省略形しか使用できないため、OPが要求<sする#+BEGIN_SRC...#+END_SRC文字列に拡張されますが<el、@ manandearthの回答のようなものは機能しません。これはまだ進行中の作業なので、状況は変わる可能性がありますが、複数文字の<XXX省略形を使用する場合は、org-modeをそのようなバージョンにアップグレードするときにそれらが壊れる可能性があることに注意してください。

別のメカニズムもあります:C-c C-,にバインドしorg-insert-structure-templateて、挿入するブロックの種類を要求します(使用可能なすべてのブロックをリストし、1回のキーを押すだけで選択できるメニューが表示されます)。その利点はbegin/end、リージョンの周りをラップすることです。したがって、すでにたくさんのものを入力していて、それをブロックにラップしたい場合は、リージョンとして選択し、C-c C-.その後に単一の文字を入力するだけです。ブロックのタイプを選択します。

このノート [fn:1]、(新しい)関数のdoc文字列、org-insert-structure-templateおよびファイルを 参照してくださいorg-tempo.el

[fn:1]変更される可能性のあるファイル内の固定行番号を指しているため、リンクは不正確になる可能性があります。リンクをクリックしても適切な場所に移動できない場合は、「構造テンプレートの展開」という文字列を検索して、この回答を自由に編集して行番号を修正してください-ありがとうございます。


12

ソースブロックの動作は、組織9.2で変更します。省略形<sはデフォルトでは機能しなくなりました。代わりに、C-c C-,which を使用しますorg-insert-structure-template

ソースブロックの追加

を押すとC-c C-,ダイアログが表示されます。を押してTABから、を入力しsrc Rます。これにより、ソースブロックが挿入され、カーソルが2行目の先頭に置かれます(point|とします)。

#+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。つまり、上記の点線のペアのcdrを入力src R C-q C-jします。結果は次のようになります。

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

あなたが押したときに今R、Emacsはソースブロックを挿入し、新しい行(LET上で、それらの間にカーソルを置く|ことがポイント):

#+begin_src R
|
#+end_src

4
<sバインディングは、まだあなただけ含める必要があり、存在する(require org-temp)ことを可能にするためにあなたのinitに。
Tyler

(require 'org-tempo)
誤字

8

コードブロックのキーバインディングについてbabel-orgは、次のようにバインドし<rてからa を試してください<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続いて<tab>をpythonブロックコードにバインドするには、例えば:

;; 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

Rもサポートするはずの PythonとJupyter Notebookを使用するbabel Rページへのこのリンクを見てくださいein
manandearth 2018年

ORG-バージョン> 9.2の場合、構文は次のようになります(add-to-list 'org-structure-template-alist '("p" . "src python"))
ギョーム

2

YASnippet Emacsパッケージをご覧ください。それはあなたがいくつかのキーワードとタブの後にコードスニペットを追加することを可能にします。orgモード内と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.