如何在 emacs 中使用 org-edit-special 编辑 markdown 代码块
How to edit a markdown code block using org-edit-special in emacs
我想像 org-edit-special
那样从 RMarkdown 文件编辑我的 R 块。我发现 generic-edit-special from 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,所以我想这只是我无法正确配置,但我现在显然迷路了。
我也知道 polymode
用于编辑 RMarkdown 文件,但不喜欢使用它。我更喜欢 "external code buffer" 方法。而且我也不能使用纯组织模式,因为我必须与不使用 Emacs 的人协作。
和你一样,我更喜欢 "external code buffer" 但经常需要共享 .Rmd 或其他格式。幸运的是,knitr
和 rmarkdown
都支持 R 代码缓冲区中的标记。有关 "spinning" 您的 R 代码的(过时的)介绍,请参阅 here。
无论如何,格式基本上只是 ##'
注释(带引号的双散列)之后的降价以及一些 yaml header 信息,如 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.
并使用 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 中的命令进行编译等。
我刚刚发现降价模式中的 markdown-edit-code-block
函数完全符合我的要求。
我将 .Rmd 文件的主要模式设置为 markdown-mode
并在 R 块内执行它会打开一个间接缓冲区,其中 ess-r-mode
作为主要模式。 (在 doom emacs 中,默认的键绑定是 , '
)
我想像 org-edit-special
那样从 RMarkdown 文件编辑我的 R 块。我发现 generic-edit-special from 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,所以我想这只是我无法正确配置,但我现在显然迷路了。
我也知道 polymode
用于编辑 RMarkdown 文件,但不喜欢使用它。我更喜欢 "external code buffer" 方法。而且我也不能使用纯组织模式,因为我必须与不使用 Emacs 的人协作。
和你一样,我更喜欢 "external code buffer" 但经常需要共享 .Rmd 或其他格式。幸运的是,knitr
和 rmarkdown
都支持 R 代码缓冲区中的标记。有关 "spinning" 您的 R 代码的(过时的)介绍,请参阅 here。
无论如何,格式基本上只是 ##'
注释(带引号的双散列)之后的降价以及一些 yaml header 信息,如 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.
并使用 knitr::spin("<filename.R>", knit=FALSE)
转换为 Rmd,或使用 rmarkdown::render("<file.R>")
.
就我个人而言,我会使用 Makefile 来简化文件生成(确保它们是制表符),例如。渲染和创建 Rmd,
foo.html: foo.R
rscript -e "knitr::spin(\"$^\", knit=FALSE); \
rmarkdown::render(\"$^\", \"all\")"
或者,可以使用 Emacs 中的命令进行编译等。
我刚刚发现降价模式中的 markdown-edit-code-block
函数完全符合我的要求。
我将 .Rmd 文件的主要模式设置为 markdown-mode
并在 R 块内执行它会打开一个间接缓冲区,其中 ess-r-mode
作为主要模式。 (在 doom emacs 中,默认的键绑定是 , '
)