knitr Markdown 在 Emacs 中突出显示?
Posted
技术标签:
【中文标题】knitr Markdown 在 Emacs 中突出显示?【英文标题】:knitr Markdown highlighting in Emacs? 【发布时间】:2013-05-10 03:51:23 【问题描述】:在 Emacs 中打开 knitr markdown 文档时,是否对现有工具或新工具进行了语法高亮(颜色)R 代码块的修改?
我正在查看的 knitr 块是三重反引号块 [```]
,其中包含 R 代码。
编辑:到目前为止我尝试过的事情:
- Ubuntu 12.04 与 Emacs 23
emacs --version
GNU Emacs 23.3.1
1.多模
https://github.com/vitoshka/polymode/issues/3
我试图让 polymode 语法高亮我的 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)
评估缓冲区:
Cannot open load file: color
-CentOS 使用 Emacs 24:
emacs --version
GNU Emacs 24.2.1
1. Polymode 安装正确
打开一个 Rmd 文件,M-x polymode-minor-mode
,语法高亮没有变化。
emacs --version
GNU Emacs 24.3.1
1. Polymode 安装正确
打开一个 Rmd 文件,M-x poly-markdown+r-mode
,开始出现一些语法高亮显示,但我需要手动修改每个三勾代码块中的测试,以使其完全显示语法。
第二张图片是在 knitr 块之前键入 Return 之后。
【问题讨论】:
我很想知道答案。一直有传言说 ESS 家伙会解决这个问题,但我还没有看到... 我家里有一些基本可以用的东西。它基于 mumamo-mode 和 markdown-mode。不过,我必须对 mumamo-mode 进行一些更改才能使其正常工作,此处解释为:bugs.launchpad.net/nxhtml/+bug/626039/comments/5。回家后我会在这里跟进并给出答案,并记住我做了什么。 维塔莉的polymode
: github.com/vitoshka/polymode怎么样
@daroczig -- 有趣。知道他在 README 的 Warning! 部分中所说的“没有识字的编程后端”是什么意思吗?
@JoshO'Brien 在 Vitalie 的 ess-help 公告中,他澄清了他的意思:“Rnw 只是一个多模态。我所说的识字编程后端是一种可以将文件处理/转换为别的东西。比如 knitr 或 org-mode。这些天我将在 R 相关的多模式地图中挂上 ess-swv-weave 和 ess-swv-PDF。暂时应该没问题,因为 knitr 足够聪明,可以识别它的东西正在处理。”
【参考方案1】:
你的问题
首先,你说你有 GNU Emacs 23.3.1,但在 polymode
readme.md
中,它写着:
使用 Emacs 24.3.1 和 24.4.5 测试。
至于你的错误:“无法打开加载文件:颜色”,在polymode.el
,有一行:
(require 'color)
这个包在 Emacs 24 中,但它很可能在你的版本中丢失。
解决方案
升级到 Emacs 的最新(因此受支持)版本。
将polymode.zip 解压到你保存 Emacs 材料的目录中,例如:
~\conf\emacs
并将生成的 polymode-master
目录更改为 polymode
将此添加到您的初始化文件中(如果您在上面使用了不同的名称,请相应地更改下面的名称):
;; 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)
Meta+rmd
当 Rmd 文件打开或在<!-- Local Variables: -->
中设置模式时
...享受生产力的巨大变化。
PS 不要忽略最后一条 elisp 行。它将允许正确保存降价。否则,当您重新打开文档时,您会遇到令人不快的意外。
Windows 用户须知
如果你是 Linux 人,请跳过这个,但是,尽管问题提到了 Ubuntu,但我的回答也完全适用于 Windows Emacs。只是关于:
第 2 步)您将在以下位置提取 polymode.zip:
%USERPROFILE%\conf\emacs
如您所料,环境变量 %USERPROFILE% 包含您的用户配置文件目录的路径。如果您不确定它是什么,请在 CLI 提示符下执行 set USERPROFILE
。
作为 Windows 用户,您可能习惯于在 My Documents
中存储东西。在这种情况下,您的目录将是:
%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"))
【讨论】:
【参考方案2】:这可能会有所帮助:http://sjp.co.nz/posts/emacs-ess-knitr/
通过 ESS 在 Emacs 中进行 Knitr 降价
【讨论】:
对不起,这个参考是错误的。目前,Emacs-ESS 没有 highlighting 用于 Rmd 文档甚至是简单的降价(顺便说一下,您的链接文章并没有这样声明)。至于前者,您需要 polymode,而后者则需要 markdown.el。另外,如果你只想将 ESS 引擎从 Sweave 切换到 knitr(不高亮!),则无需阅读本文的所有复杂内容,只需在 init 文件中添加(setq ess-swv-processor 'knitr)
即可。以上是关于knitr Markdown 在 Emacs 中突出显示?的主要内容,如果未能解决你的问题,请参考以下文章
使用knitr和pandoc转换为PDF时markdown中的图形位置
使用 R markdown 和 knitr:可以在 YAML 中解释 R 对象
R Markdown、Knitr、Pandoc和Bookdown之间的关系