【发布时间】:2012-03-10 09:08:27
【问题描述】:
是否有一个 Emacs 次要模式(或一段 elisp 代码)可以让您在 Sweave(Sweave = R + LaTeX)中选择性地隐藏/显示环境?
例如,我想移动到代码块 (>) 的开头,按一下键,然后将环境的内容隐藏起来。
这可能吗?我刚刚尝试了 hs-minor-mode、allout-mode 和 outline-minor-mode,但大多数都无法识别 R 环境。
我还尝试了非常适合折叠/展开的 org-mode,但不支持 LaTeX 突出显示代码,例如:\cite{}; \参考{}; \ce{} ...
最好的 里卡多
--编辑--
我尝试了一天使用 emacs-folding-mode 但是,因为我的代码很长(超过 2000 行),折叠模式“发疯了”,例如误解了某些特殊字符的挖掘(即$),在 R 中的用途与在 LaTeX 中的用途非常不同。我认为问题是 Sweave 固有的,因为在同一个缓冲区中,我同时拥有 R 代码和 LaTeX 代码。
所以,现在我正在测试 emacs 大纲次要模式。但是,当我从 LaTeX(反之亦然)移动到 R 时,尽管我在 .emacs 中写入,但所有概述的部分都已展开:
(defun turn-on-outline-minor-mode ()
(outline-minor-mode 1))
(add-hook 'ess-mode-hook 'turn-on-outline-minor-mode)
(add-hook 'LaTeX-mode-hook 'turn-on-outline-minor-mode)
(add-hook 'latex-mode-hook 'turn-on-outline-minor-mode)
(setq outline-minor-mode-prefix "\C-c\C-o")
你有什么建议吗??
问候
--编辑 2--
它似乎有效:
(load "folding" 'nomessage 'noerror)
(folding-mode-add-find-file-hook)
(add-hook 'LaTeX-mode-hook 'folding-mode)
(add-hook 'ess-mode-hook 'folding-mode)
(folding-add-to-marks-list 'ess-mode "#{{{ " "#}}}" " ")
不知道对不对,当你离开这个块时,它会自动展开。
【问题讨论】:
-
是 Rnw 模式的实现给你带来了麻烦。我也试过hideshow。但是因为 Rnw 在你离开/进入的区块中重置了模式,所以一切都被重置了。 ESS 中有一些关于重写 Rnw 的讨论,基于更好的 noweb.el。
-
您好,我使用折叠模式部分解决了问题。我用我的解决方案重新编辑了帖子。