Knitr - выделение Markdown в Emacs?

111

Есть ли какая-либо модификация существующего инструмента или нового инструмента, который будет выделять синтаксисом (цветом) блоки кода R в документе с уценкой knitr при открытии в Emacs?

Фрагменты вязального устройства, на которые я смотрю, представляют собой блоки с тройным обратным апострофом, [```]которые содержат код R.

РЕДАКТИРОВАТЬ: вещи, которые я пробовал до сих пор:

- Ubuntu 12.04 с Emacs 23

emacs --version
GNU Emacs 23.3.1

1. Полимод

https://github.com/vitoshka/polymode/issues/3

Я пытаюсь использовать полимод для синтаксической подсветки моих файлов Rmd, но он жалуется на файл загрузки «цвет»:

cd ~/.emacs.d
git clone https://github.com/vitoshka/polymode.git

В моем файле .emacs:

(add-to-list 'load-path "/home/avilella/.emacs.d/polymode/")
(add-to-list 'load-path "/home/avilella/.emacs.d/polymode/modes/")

;; Require any polymode bundles that you are interested in:

(require 'poly-R)
(require 'poly-markdown)

eval-буфер:

Cannot open load file: color

- CentOS с Emacs 24:

emacs --version
GNU Emacs 24.2.1

1. Полимод установлен правильно

Откройте файл Rmd,, M-x polymode-minor-modeбез изменения подсветки синтаксиса.


emacs --version
GNU Emacs 24.3.1

1. Полимод установлен правильно

Откройте файл Rmd, M-x poly-markdown+r-modeначинает появляться подсветка синтаксиса, но мне нужно вручную изменить тест в каждом блоке кода с тремя отметками, чтобы он полностью отображал синтаксис.

Введите описание изображения здесь

Введите описание изображения здесь

Второе изображение сразу после набора Return перед блоком вязальщика.

719016
источник
10
я хотел бы знать ответы. Ходят упорные слухи, что ребята из ESS
дойдут
3
У меня дома есть кое-что, что в принципе работает. Он основан на режиме mumamo и режиме уценки. Мне пришлось внести пару изменений в режим mumamo, чтобы заставить его работать, объяснение здесь: bugs.launchpad.net/nxhtml/+bug/626039/comments/5 . Я дам ответ, когда вернусь домой и вспомню, что я сделал.
Эрик Айверсон
4
А как насчет polymode
Виталия
3
@daroczig - Интересно. Любая идея, что он имеет в виду, говоря «Нет грамотного программирования» в предупреждении README ! раздел?
Джош О'Брайен
4
@ JoshO'Brien В объявлении Виталия ess-help он поясняет, что он имел в виду: «Rnw - это просто полимод. Под грамотным программированием я подразумеваю инструмент, который может обрабатывать / преобразовывать файл во что-то другое. Например, knitr или org- Сейчас я подключу ess-swv-weave и ess-swv-PDF к полимодовым картам, связанным с R. Это должно быть вполне нормально, поскольку knitr достаточно умен, чтобы распознавать то, с чем имеет дело ».
Эрик Айверсон

Ответы:

3

Это может помочь: http://sjp.co.nz/posts/emacs-ess-knitr/

Уценка Knitr в Emacs через ESS

приёлахири
источник
Извините, но эта ссылка неверна. В настоящее время в Emacs-ESS нет подсветки для документов Rmd или даже простой уценки (и, кстати, ваша связанная статья этого не утверждает). Что касается первого, вам нужен полимод, а для второго - markdown.el. Кроме того, если все, что вам нужно, это просто переключить движок ESS с Sweave на knitr (без выделения!), Нет необходимости подробно описывать все сложности, описанные в этой статье, просто добавьте (setq ess-swv-processor 'knitr)файл инициализации.
Антонио
2

Твоя проблема

Прежде всего, вы говорите, что у вас есть GNU Emacs 23.3.1, но в polymode readme.mdнем говорится:

Протестировано с Emacs 24.3.1 и 24.4.5.

Что касается вашей ошибки: «Не удается открыть файл загрузки: цвет», в polymode.el, есть строка:

(require 'color)

этот пакет есть в Emacs 24, но он вполне может отсутствовать в вашей версии.

Решение

  1. Выполните обновление до последней (поэтому поддерживаемой) версии Emacs.

  2. Распакуйте polymode.zip в каталог, в котором вы храните материалы Emacs, например:

    ~\conf\emacs

и измените полученный polymode-masterкаталог наpolymode

  1. Добавьте это в свой файл инициализации (и если вы использовали другие имена выше, измените имена ниже соответственно):

    ;; Just an Emacs personal dir containing polymode packages etc.
    (setq MY-EMACS  "~/conf/emacs") 
    
    (defun my-emacs  (subfolder)
    "Get path to personal dir + subfolder"
    (concat (expand-file-name MY-EMACS) "/" subfolder))
    
    ;; ESS Markdown
    ;; -------------
    (defun rmd-mode ()
      "ESS Markdown mode for rmd files"
      (interactive)
      (setq load-path 
        (append (list (my-emacs "polymode/") 
                  (my-emacs "polymode/modes/"))
            load-path))
      (require 'poly-R)
      (require 'poly-markdown)
      (poly-markdown+r-mode))
    
    ;; Wrap line in markdown. Comment if you don't dislike words cut in the middle
    (add-hook 'markdown-mode-hook (lambda () (visual-line-mode 1)))
    
    ;; Let you use markdown buffer easily
    (setq ess-nuke-trailing-whitespace-p nil)  
    
  2. Meta+ rmdкогда Rmd-файл открыт или установлен режим <!-- Local Variables: -->
    ... наслаждайтесь резким изменением вашей производительности.

PS
Не упускайте из виду последнюю строчку elisp. Это позволит правильно сохранить уценку. Иначе при повторном открытии документа вас ждут неприятные сюрпризы.

Примечание для пользователей Windows

Пропустите это, если вы любитель Linux, но, несмотря на то, что в вопросе упоминается Ubuntu, мой ответ идеально подходит и для Windows Emacs. Только в отношении:

  • Шаг 2) Вы распакуйте polymode.zip в:

    %USERPROFILE%\conf\emacs

    Как вы догадываетесь, переменная среды% USERPROFILE% содержит путь к каталогу вашего профиля пользователя. Если вы не уверены, что это такое, выполните set USERPROFILEв командной строке CLI.
    Как пользователь Windows вы можете использовать для хранения вещей My Documents. В этом случае ваш dir будет:

    %USERPROFILE%\Documents\conf\emacs
  • Шаг 3) Если на шаге 2) вы использовали путь %USERPROFILE%\Documents\conf\emacs, измените соответственно первую строку кода:

    (setq MY-EMACS  "~/conf/emacs") 

    в (обратите внимание на косую черту):

    (setq MY-EMACS  "~/Documents/conf/emacs") 

    В обоих случаях (с «Моими документами» и без него) вы можете предпочесть стиль Windows:

    (setq MY-EMACS (substitute-in-file-name "$USERPROFILE/Documents/conf/emacs")) 
антонио
источник