如何在emacs中使用org-edit-special编辑markdown代码块

问题描述 投票:0回答:1

我想像org-edit-special一样从RMarkdown文件编辑我的R块。我发现generic-edit-specialjonathan 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的人进行协作。

r emacs r-markdown org-mode knitr-spin
1个回答
0
投票

像您一样,我更喜欢“外部代码缓冲区”,但通常需要共享.Rmd或其他格式。幸运的是,knitrrmarkdown都支持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使用这些命令进行编译,等等。

© www.soinside.com 2019 - 2024. All rights reserved.