Chinaunix首页 | 论坛 | 博客
  • 博客访问: 228216
  • 博文数量: 3
  • 博客积分: 2673
  • 博客等级: 少校
  • 技术积分: 93
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-01 13:02
个人简介

hi there

文章分类

全部博文(3)

文章存档

2009年(3)

我的朋友

分类: LINUX

2009-02-23 09:23:47

Emacs技巧:selective-display 代码折叠

Created: Fang lungang 01/15/2009 Modified: Fang lungang 02/20/2009 15:58>

home

Emacs 还有一种代码折叠的方式叫做 selective-display ,它单纯根据每行的缩 进折叠。我通常用它来折叠 C 代码中的 "case" 块,因为很多时候 case:break; 之间的代码并没有用大括号包含起来,无法使用 hs-minor-mode 。

可是 selective-display 直接使用也不方便:需要先判定要折叠(隐藏)的代码 的缩进列数 n ,然后再 C-u n C-x $ ,展开时的 C-x $ 按起来也不甚方便。所 以我写了个函数能够自动折叠、展开与当前行缩进相同的所有行,并绑定到 M-' ,这样使用起来就方便多了。

(define-key global-map (kbd "M-'") 'my-toggle-selective-display)

(defun my-toggle-selective-display()
"set-selective-display to current column or toggle
selective-display --lgfang"

(interactive)
(let ((arg (progn (back-to-indentation) (current-column))))
(set-selective-display (if (eq arg selective-display) nil arg))))

对于如下代码,当光标在第三行的任一位置时按 M-' ,代码会折叠如第二栏;再按一次又会重新展开。

1       switch (ch) {                     |       switch (ch) {
2 case 'H': | case 'H':...
3 Hflag = 1; | case 'L':...
4 Lflag = Pflag = 0; | case 'P':...
5 break; | case 'R':...
6 case 'L': | case 'f':...
7 Lflag = 1; | case 'i':...
8 Hflag = Pflag = 0; | case 'l':...
9 break; | case 'n':...
10 case 'P': | case 'p':...
11 Pflag = 1; | case 'r':...
12 Hflag = Lflag = 0; | case 'v':...
13 break; | default:...
14 case 'R': | }
15 Rflag = 1; |
16 break; |
17 case 'f': |
18 fflag = 1; |
19 iflag = nflag = 0; |
阅读(3692) | 评论(1) | 转发(0) |
0

上一篇:Emacs技巧:快速打开最近打开过的文件

下一篇:没有了

给主人留下些什么吧!~~

chinaunix网友2010-01-05 15:33:49

Good work!Thanks。