Emacs, R, Org-режим: как включить автоматический переход в ESS-режим внутри блоков кода R? - PullRequest
9 голосов
/ 05 декабря 2011

При использовании кодовых фрагментов R в документе .Rnw буфер emacs автоматически обнаруживает, что курсор находится внутри фрагмента кода (т. Е. В пределах <<>> и @), и переключается в режим ESS -это очень ценно, потому что можно получить форматирование кода на основе ESS в пределах фрагмента кода и, что более полезно, можно отправлять строки кода / регионы в нижний *R* буфер процесса.

Как сделатьЯ получаю ту же функциональность в файле режима org в R кодовых блоках (т.е. между #+begin_src R и #+end_src) - я бы хотел, чтобы emacs автоматически распознал его в кодовом блоке R-кода и включил ESS-режим, чтобы я мог отправлять фрагменты кода процессу *R*.Я знаю, что могу сделать Ctl-C ' и переключиться на другой буфер режима ESS, где я могу редактировать код и получить все другие удобства режима ESS (включая отправку кода на R).Однако я хотел бы, чтобы не должен был это делать, т.е. я хочу иметь возможность отправлять фрагменты кода из блока кода R в тот же буфер режима org.

Ответы [ 5 ]

4 голосов
/ 06 декабря 2011

Год назад или около того, я задал тот же вопрос в орг-режиме-списке.@ cm2 уже упоминал, что невозможно использовать функциональность ESS в режиме org;Насколько я знаю, Emacs не может обрабатывать два основных режима, и даже с режимом mmm, похоже, возникают некоторые трудности.

Дэн Дэвисон любезно опубликовал некоторый elisp-код, который имитирует некоторые функции ESS.Итак, вы можете проверить ответы Дэна на мой вопрос.

4 голосов
/ 05 декабря 2011

AFAIK, этого нельзя сделать с текущей реализацией режима Org.

Я не уверен, что это вообще возможно в режиме Org, не углубляясь в код elisp. Суть команды C-c ' в режиме Org состоит в том, что у вас есть дополнительный буфер, в котором есть вся подсветка синтаксиса, которая вам нужна / нужна для вашего конкретного языка.

Вероятно, есть способ обойти это для R -специфичного кода, написав некоторый хук в режиме Org, который сначала проверяет, есть ли вы в блоке #+begin_src R ... #+end_src R, а затем проверяя для фрагмента кода. Я подозреваю, что это будет грязно и конфликтует с другими функциями в режиме Org. Кроме того, вам нужно написать другую функцию, чтобы захватить текущий блок кода и передать его интерпретатору R в режиме Org вместе со всеми опциями, которые вы добавили в блок src.

0 голосов
/ 06 марта 2015

Обходной путь - переключение вручную между режимами, когда это необходимо, например, добавление следующего кода в .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)
0 голосов
/ 26 ноября 2014

Файл poly-org.el в пакете polymode предназначен для редактирования в нескольких режимах в режиме org. Я пытался, но он зависает Emacs из-за не включения Jit-блокировки в косвенном буфере.

0 голосов
/ 09 июля 2014

Возможно, новый режим многомодового режима https://github.com/vitoshka/polymode/blob/master/readme.md может помочь.Я еще не пробовал, но кажется многообещающим.

...