2012-02-19 72 views
15

在Sweave(Sweave = R + LaTeX)中,是否有Emacs小模式(或elisp代码块)可让您选择性地隐藏/显示环境?例如,我想移动到代码块的开始处(< >>),敲击键盘并让环境的内容隐藏起来。EMACS折叠/展开R代码

这可能吗?我只是试过hs-minor-mode,allout-mode和outline-minor-mode,但其中大多数都不识别R环境。我也尝试过org模式,该模式非常适合折叠/展开,但是,不支持LaTeX高亮表达式的代码,如:\ cite {};}}。 \ REF {}; \ CE {} ...

最佳 里卡多

- 编辑 -

我试过有一天用emacs折叠模式,但是,因为我在一个很长的工作代码(超过2000行),折叠模式“变得疯狂”,例如误解了某些特殊字符(即$)的挖掘,这在R中的使用与LaTeX中的使用非常不同。我认为这个问题是Sweave固有的,因为在同一个缓冲区中,我将R代码和LaTeX代码放在一起。

所以,现在我正在测试emacs大纲次要模式。但是,当我过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") 

你有什么建议?

问候

--edit 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 "#{{{ " "#}}}" " ") 

我不知道,如果是正确的,当你离开块,它会自动为展开。

+1

它的实施Rnw模式给你带来麻烦。我也尝试了隐藏表演。但是因为Rnw会重置您离开/进入的区块模式,所有内容都会重置。 ESS中有一些会谈根据更好的[noweb.el](http://www.loveshack.ukfsn.org/emacs/noweb.el)重写了Rnw。 – VitoshKa 2012-03-09 13:28:44

+0

嗨,我部分解决了使用折叠模式的问题。我用矿解决方案重新编辑了这篇文章。 – Riccardo 2012-03-16 10:21:29

回答

1

有一个通用的折叠模式,在这里:http://www.emacswiki.org/emacs/FoldingMode

+0

你有什么“麻烦”? – snim2 2012-02-20 11:37:48

+0

嗨,我试图emacs折叠模式,我有一些麻烦。我添加到我的.emacs中:'(load“folding”'nomessage'noerror) (折叠模式 - 添加 - 查找文件钩子) (折叠 - 添加到标记列表'Rnw-mode“# {{{“”#}}}“nil t)'但是当我打开一个.Rnw文件时,emacs没有检测到折叠标记;此外,如果我折叠区域(C-c @ C-x),emacs将使用LaTeX的折叠字符而不是“#{{{#}}}”。任何建议? – Riccardo 2012-02-20 11:39:52

+0

如果问题在于折叠没有使用您正在使用的语言的注释语法,请尝试按照以下位于此处的Ruby,PHP和Prolog的说明进行操作:http://www.emacswiki.org/emacs/FoldingMode# toc4,然后修改为R. – snim2 2012-02-20 12:57:22

0

我已经有很好的效果的隐藏显示hs-minor-mode,这些都是我基本上都用的线我~/.emacs.d/init.el

(add-hook 'ess-mode-hook 'hs-minor-mode) 

(eval-after-load 'hideshow 
'(progn 
    (global-set-key (kbd "C-+") 'hs-toggle-hiding)))