免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2053 | 回复: 0
打印 上一主题 下一主题

Emacs技巧:selective-display 代码折叠 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-23 09:23 |只看该作者 |倒序浏览

                                                                                    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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP