Chinaunix
标题:
Emacs技巧:selective-display 代码折叠
[打印本页]
作者:
lgfang
时间:
2009-02-23 09:23
标题:
Emacs技巧:selective-display 代码折叠
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; |
本文来自ChinaUnix博客,如果查看原文请点:
http://blog.chinaunix.net/u/23408/showart_1839394.html
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2