我想像org-edit-special
一样从RMarkdown文件编辑我的R块。我发现generic-edit-special的jonathan leech-pepin对html文件中的js,css和ruby进行了类似的处理。我认为我可以按照作者的建议对其进行调整,以使其适合我的情况,但即使是原始形式,也无法使它起作用。
我能够从带有js脚本块的html文件中运行函数ges/org-edit-special
,但没有任何反应(没有错误,也没有新缓冲区)。我将Internal Script example from here用作此测试的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))
我对emacs相当陌生,通常使用spacemacs,所以我想这只是我无法正确配置事物,但我现在显然已经迷路了。
我也知道用于编辑RMarkdown文件的polymode
,但不喜欢使用它。我更喜欢“外部代码缓冲区”方法。而且我也不能使用纯组织模式,因为我必须与不使用Emacs的人进行协作。
像您一样,我更喜欢“外部代码缓冲区”,但通常需要共享.Rmd或其他格式。幸运的是,knitr
和rmarkdown
都支持R代码缓冲区中的标记。有关“旋转” R代码的(过时的)介绍,请参见here。
无论如何,格式基本上只是##'
注释(带引号的双哈希)后的减价,带有Rmd文件中的某些yaml标头信息。以下可以作为纯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.
并使用knitr::spin("<filename.R>", knit=FALSE)
转换为Rmd,或使用rmarkdown::render("<file.R>")
渲染为HTML(如上所述)。
就个人而言,我将使用Makefile简化文件生成(请确保它们是制表符),例如。渲染和创建Rmd,
foo.html: foo.R
rscript -e "knitr::spin(\"$^\", knit=FALSE); \
rmarkdown::render(\"$^\", \"all\")"
或者,可以从Emacs使用这些命令进行编译,等等。