Emacs, R, Org-mode: как включить автоматический переход в ESS-режим в блоках кода R?
при использовании R
куски кода .Rnw
документ, буфер emacs автоматически обнаруживает, что курсор находится внутри фрагмента кода (т. е. внутри <<>>
и @
), и переключается в ESS-режим - это очень ценно, потому что можно получить ESS-форматирование кода в пределах фрагмента кода, и более-полезно, можно отправить строки/регионы кода в подчиненный *R*
process-buffer.
как получить ту же функциональность в файле org-mode в R
код блоков (то есть между #+begin_src R
и #+end_src
) -- Я хотел бы, чтобы emacs автоматически распознал его в блоке кода R и включил ESS-mode, чтобы я мог отправлять фрагменты кода в
5 ответов
год назад или около того, я спросил тот же вопрос в списке org-mode -. @cm2 уже упоминал, что невозможно использовать функциональность ESS в org-mode; насколько я знаю, Emacs не может обрабатывать два основных режима и даже с MMM-mode, похоже, есть некоторые трудности.
Дэн Дэвисон любезно опубликовал некоторый elisp-код, который имитирует некоторые функции ESS. Возможно, вы захотите проверить ответы Дэна на мой вопрос.
AFAIK, это не может быть сделано с текущей реализацией Org-mode.
Я не уверен, что это выполнимо вообще в Орг-режиме без некоторого углубления в код elisp. Главный момент C-c '
команда в Org-mode такова, что у вас есть дополнительный буфер, который имеет всю подсветку синтаксиса, которую вы хотите/нужно для вашего конкретного языка.
вероятно, есть способ обойти это для R
- конкретный код, написав некоторый крючок Org-mode, который проверяет во-первых, чтобы увидеть, если вы находитесь в #+begin_src R
...#+end_src R
блок, а затем Проверка на наличие фрагмента кода. Я подозреваю, что это будет беспорядочно и конфликтовать с другими функциями Org-mode. Кроме того, вам нужно будет написать другую функцию, чтобы захватить текущий блок кода и передать его в Org-mode R
интерпретатор вместе со всеми параметрами, которые вы добавили в src
блок.
может быть, что новый полимодовый режим https://github.com/vitoshka/polymode/blob/master/readme.md может помочь. Я еще не пробовал, но выглядит многообещающе.
poly-org.el в пакете polymode, предназначен для решения нескольких режимов редактирования в org-режиме. Я пробовал, но он замораживает Emacs из-за не включения 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)