emacs、r、org-mode:rコードブロック内のESSモードへの自動スイッチを有効にする方法は?
質問
使用するとき R
のコードチャンク .Rnw
ドキュメント、EMACSバッファーは、カーソルがコードチャンク内にあることを自動的に検出します(つまり、 <<>>
と @
)、およびESSモードに切り替えます - これは非常に価値があり、コードチャンク内でESSベースのコードフォーマットを取得できるため、より正確には、コード行/領域を劣等に送信できます *R*
プロセスバッファ。
内部の組織モードファイルで同じ機能を取得するにはどうすればよいですか R
コードブロック(つまりの間 #+begin_src R
と #+end_src
) - emacsにRコードコードブロック内にあることを自動的に認識し、ESSモードをオンにして、コードのスニペットを送信できるようにしたい *R*
処理する。私はできることを知っています Ctl-C '
また、コードを編集して他のすべてのESSモードの便利さを取得できる別のESSモードバッファーに切り替えます(コードの送信を含む R
)。しかし、私はしたいです いいえ これを行う必要があります。つまり、同じ組織モードバッファーでRコードブロックからコードスニペットを送信できるようにしたいと思います。
解決
1年ほど前、私は尋ねました 同じ質問 ORG-MODE-LISTで。 @CM2はすでに、組織モード内でESS機能を使用することはできないと述べています。私が知っている限り、EMACSは2つの主要なモードを処理できず、MMMモードであっても、いくつかの困難があるようです。
Dan Davisonは、ESS機能のいくつかを模倣するElisp-Codeを親切に投稿しました。だから、あなたは私の質問に対するダンの返信をチェックしたいかもしれません。
他のヒント
AFAIK、これはORG-Modeの現在の実装では実行できません。
Elispコードを掘り下げることなく、Org-Mode内でこれがまったく実行可能であるかどうかはわかりません。の主要なポイント C-c '
ORG-Modeのコマンドとは、特定の言語に必要/必要なすべての構文を強調表示する追加のバッファがあるようにするためです。
おそらくこれをハッキングする方法があります R
- 最初にチェックして、あなたがにいるかどうかを確認するいくつかの組織モードフックを書くことによる特異的コード #+begin_src R
...#+end_src R
ブロックしてから、コードチャンクを確認します。これは乱雑であり、他の組織モード機能と競合すると思います。さらに、現在のコードブロックをつかみ、それを組織モードに渡すために別の関数を記述する必要があります R
通訳、およびあなたが追加したすべてのオプションとともに src
ブロック。
新しいポリモードモードである可能性があります https://github.com/vitoshka/polymode/blob/master/readme.md助けることができます。私はまだ試していませんが、有望なようです。
Poly-Org.el In Polymodeパッケージは、組織モードでの複数のモード編集に対処するように設計されています。試してみましたが、間接バッファーでJITロックを有効にしないため、エマックをフリーズします。
回避策は、必要に応じてモード間で手動で切り替えて、たとえば次のコードを.EMACSに追加し、F6を使用しています。
;; Toggle between org & R modes.
(defun toggle-org-R-mode ()
(interactive)
"Toggle mode between org-R modes"
(cond
((string= major-mode "org-mode")
(R-mode))
((string= major-mode "ess-mode")
(org-mode))
)
)
(global-set-key [f6] 'toggle-org-R-mode)