【问题标题】:EMACS folding/unfolding R codeEMACS 折叠/展开 R 代码
【发布时间】: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
  • 您好,我使用折叠模式部分解决了问题。我用我的解决方案重新编辑了帖子。

标签: emacs sweave folding ess


【解决方案1】:

我在 hideshow 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)))

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你遇到了什么“麻烦”?
    • 您好,我尝试了 emacs 折叠模式,但遇到了一些问题。我在我的 .emacs 中添加了这个:(load "folding" 'nomessage 'noerror) (folding-mode-add-find-file-hook) (folding-add-to-marks-list 'Rnw-mode "#{{{" "#}}}" nil t) 但是当我打开一个 .Rnw 文件时,emacs 没有检测到折叠标记;此外,如果我折叠一个区域(C-c @ C-x),emacs 使用 LaTeX 的折叠字符而不是“#{{{ #}}}”。有什么建议吗??
    • 如果问题是折叠没有使用您正在使用的语言的注释语法,请尝试按照此处的 Ruby、PHP 和 Prolog 说明进行操作:emacswiki.org/emacs/FoldingMode#toc4 并修改为R.
    • 这就是我用这段代码 (folding-add-to-marks-list 'Rnw-mode "#{{{" "#}}}" nil t) 所做的,但 emacs 没有检测到折叠标记。
    • 对于遇到同样问题的人来说,正确的 sintax 是:(add-hook 'LaTeX-mode-hook 'folding-mode)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多