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