Как редактировать блок кода уценки с помощью org-edit-special в emacs - PullRequest
0 голосов
/ 03 февраля 2020

Я бы хотел отредактировать свои фрагменты R из файлов RMarkdown, как это делает org-edit-special. Я нашел generi c -edit-special из Джонатана Лича-Пепина , который делает аналогичные вещи для js, css и ruby в html файлах. Я подумал, что могу настроить его, как предложено автором, чтобы он работал для моего случая, но я не смог заставить его работать даже в его первоначальном виде.

Я смог запустить функцию ges/org-edit-special из файл html с блоком сценариев js, но ничего не произошло (без ошибок и без нового буфера). Я использовал Внутренний пример скрипта отсюда в качестве html файла для этого теста.

Вот init.el, который я сделал для тестирования:

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
(setq package-list
    '(js2))

; activate all the packages
(package-initialize)
(load "~/.emacs.d/lisp/generic-edit-special")

; Org setup (telling org-mode to edit javascript with js2)
(push (cons "javascript" 'js2) org-src-lang-modes)
;; For html-mode

(require 'generic-edit-special)
(eval-after-load "sgml-mode" '(define-key sgml-mode-map [(control c) ?'] 'ges/org-edit-special))

I Я довольно новичок в emacs и обычно использую spacemacs, так что я думаю, что это просто я не могу правильно сконфигурировать вещи, но сейчас я явно потерян.

Я также знаю о polymode для редактирования файлов RMarkdown, но знаю не люблю его использовать. Я предпочитаю подход «внешний буфер кода». И я не могу использовать чистый режим org, поскольку мне приходится сотрудничать с людьми, не использующими Emacs.

1 Ответ

1 голос
/ 03 февраля 2020

Как и вы, я предпочитаю «внешний буфер кода», но часто нужно использовать .Rmd или другие форматы. К счастью, и knitr, и rmarkdown поддерживают разметку в буфере кода R. См. здесь для (устаревшего) вступления, чтобы "раскрутить" ваш код R.

В любом случае, формат в основном просто уценка после ##' комментариев (двойной га sh с цитатой) с некоторой информацией заголовка yaml как в файлах Rmd, например. следующее может быть выполнено в виде чистого кода R,

##' ---
##' title: "Foo"
##' output:
##'   html_document:
##'     toc: TRUE
##' author: Me
##' ---

##- r setup, include=FALSE -------------------------------------------------
library(ggplot2)
knitr::opts_chunk$set(echo = TRUE)
## /* end r setup */

##' # A header
##' a code block
##- blk1 -------------------------------------------------------------------
dat <- data.frame(x=sample(10, 10), y=runif(10))
## /* end blk1 */

##' # Another section
##' A code block w/ image
##- img,  fig.width=9, fig.height=4 ----------------------------------------
plot(y ~ x, data=dat, type='l')
## /* end sem */

##' # Next section
##' etc.

и преобразовано в Rmd с knitr::spin("<filename.R>", knit=FALSE), или преобразовано в HTML (как указано выше) с помощью rmarkdown::render("<file.R>").

Лично я бы упростил генерацию файлов с помощью Makefile (убедитесь, что это вкладки), например. и для рендеринга, и для создания Rmd,

foo.html: foo.R
    rscript -e "knitr::spin(\"$^\", knit=FALSE); \
    rmarkdown::render(\"$^\", \"all\")"

В качестве альтернативы, для компиляции можно использовать команды из Emacs и т. д. c.

...