编辑Emacs Lisp代码的概述或折叠模式

7
有没有一种与Emacs-Lisp模式结合使用的小模式,可以在不向文本文件插入特殊代码的情况下轻松地开启或关闭每个函数定义?
例如:
(defun test1()
  (message "Hi!"))

(defun test2()
  (message "Bye"))

按下 F1 将折叠每个函数定义到顶部行/标题中。

+ (defun test1()
+ (defun test2()

按下前面的加号标志将展开给定函数并使其可编辑。按下 F2 键将展开所有定义。
3个回答

5

这是我的设置:

(require 'hideshow)
(global-set-key (kbd "C-M-h") 'hs-toggle-hiding)
(global-set-key (kbd "<f2> h h") 'hs-hide-all)
(global-set-key (kbd "<f2> h j") 'hs-show-all)

1
谢谢!看起来也运行正常。它看起来类似于 outline-minor-modehs-minor-modeoutline-minor-mode 之间的实际区别是什么? - Håkon Hægland

2

outline-minor-mode可以实现这个功能。你可以在它的菜单中查看。相比于加号+,你会得到典型的省略号...。这不应该有影响。你可以自己设置按键绑定。(我知道你够聪明!)


谢谢!在使用 C-c @ C-t 隐藏所有内容后,如何展开特定的函数定义?我尝试了 C-c @ <tab> 但是无法使其工作。 - Håkon Hægland
大纲-> 显示绑定到 C-c @ C-e 的条目。那是一个绑定! - Tobias
1
你可以使用 reveal-mode,这样将光标移动到隐藏文本中时,它会自动显示出来(“揭示”)。 - Stefan
除了 C-c @ C-e(显示一个条目),我们还可以使用 C-c @ C-s(显示整个子树)来实现这一功能。 - imz -- Ivan Zakharyaschev

1

outshineoutline-minor-mode的一种变体,它允许您使用org-mode语法,这比普通的outline-mode更强大。


谢谢,这看起来很有趣。我已经下载了它。但是我在哪里可以找到关于可用按键绑定的信息? - Håkon Hægland
如果您已经在使用该模式,您可以通过 C-m 或 C-b 获取绑定。如果没有,则它们位于 outshine.el 的源代码中,大约在第 1500 行左右。 - Peter Westlake
我尝试了 C-mC-b,但它们不起作用(似乎绑定到 newlinebackward-char)。在 hs-minor-mode 中有没有类似于 C-c @ C-M-h 的等效命令? - Håkon Hægland
啊,打错字了!我是指 C-h mC-h b,抱歉!它们分别是 describe-modedescribe-bindings 命令。 - Peter Westlake
好的,谢谢,C-h b有效。我现在尝试了以下简单的文件 t.el(defun test () (message "ok")),将光标放在定义内部,然后键入 C-c @ C-c 来运行 hide-entry,但它只在回显区域中显示消息 before first heading - Håkon Hægland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接