emacs使用folding-mode

本文

主要介绍emacs folding-mode的使用。

版本 说明
0.1 初版发布

背景

  • 主机: Thinkpad S2
  • 系统: Deepin GNU/Linux 15.11
  • 内核: Debian 6.3.0-18+deb9u1
  • emacs版本:Linux GNU Emacs 26.3

什么是folding-mode?

emacs 的folding-mode是一种emacs的副模式,提供代码折叠功能,方便代码阅读和编辑。emacs用户肯定知道org-mode的大纲模式,但是只能在阅读或编辑org文档时才可以使用,而folding-mode可以对任何模式实现类似于org-mode大纲模式的功能。

安装folding-mode

最简捷的安装方式,是通过emacs的包管理器安装,安装方法请参考我的另一篇帖子 emacs如何安装插件

folding-mode的使用

修改emacs配置文件

安装folding-mode后,需要修改emacs配置文件,.emacs或.emacs.d/init.el,开启folding-mode功能,请将下面代码添加到emacs配置文件。注意:如需为新的格式添加folding-mode功能,请参照folding-add-to-marks-list完成添加。

1
2
3
4
5
6
7
8
(if (load "folding" 'nomessage 'noerror)
    (folding-mode-add-find-file-hook))

(folding-add-to-marks-list 'verilog-mode         "//{{{" "//}}}")
(folding-add-to-marks-list 'c-mode               "//{{{" "//}}}")
(folding-add-to-marks-list 'latex-mode           "%%{{{" "%%}}}")
(folding-add-to-marks-list 'lisp-mode            ";;{{{" ";;}}}")
(folding-add-to-marks-list 'shell-script-mode    "##{{{" "##}}}")

个人配置

为了使用方便,我对folding-mode的常用命令设置了别名,如下:

1
2
3
4
5
6
7
8
(defalias 'me-folding-mode      'folding-mode)
(defalias 'me-folding-reg       'folding-fold-region)
(defalias 'me-folding-in        'folding-shift-in)
(defalias 'me-folding-out       'folding-shift-out)
(defalias 'me-folding-hide-all  'folding-whole-buffer)
(defalias 'me-folding-show-all  'folding-open-buffer)
(defalias 'me-folding-hide      'folding-hide-current-entry)
(defalias 'me-folding-show      'folding-show-current-entry)

使用

folding-mode,我主要是以命令的形式使用,其实也支持快捷键,快捷键比较复杂且难以记住,如folding-shift-in,快捷键是 C-c @ >,所以我还是以快捷键使用为主,其他快捷键可以查看folding-mode文档或使用emacs help。

  • 打开文件(支持folding-mode的类型), M-x folding-mode ,打开folding-mode。
  • 选中一块区域,输入 M-x me-folding-reg,此时会在buffer中仅显示选中的内容,且上下插入了folding的注释符,输入标题(也就是第一行注释符后的内容),添加标题后 M-x me-folding-out 可以显示所有内容;或者可以手动添加folding的注释符,通过 M-x me-folding-hide/show 打开或关闭折叠区。
  • 其他命令可自行尝试,不再说明。

效果

  • hide:
1
# {{{ Title1...
  • show:
1
2
3
4
5
6
7
# {{{ Title1

aaabbbccc=123456
aaabbbccc=123456
aaabbbccc=123456

# }}}

文章原创,可能存在部分错误,欢迎指正,联系邮箱 cao_arvin@163.com。