Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > Linux > 谈Vim 6.0的Folding功能简介
【标  题】:谈Vim 6.0的Folding功能简介
【关键字】:in,ld,Vim,Folding
【来  源】:网络

谈Vim 6.0的Folding功能简介

Your Ad Here Vim 6.0 多了超级好用的 Folding 功 能,这篇文章是为了让大家能快速了解使用方法而写的。在开始前,先准备好你的 Vim 6.0 吧( version >= aq BETA ),如果不知道到哪里可以取得,可以至 http://www.vim.org


简介


Vim 是什麽就不介绍了,此篇文章当作你已经有了基本 Vi 或 Vim 使用的基础。但 Folding 当然要介绍一下, Folding 的中文叫做「折」。而在 Vim 中呢,就是可以把文章或程序码给「折」起来。这样说可能很模糊,不如看个例子吧。

假设现在我有一个蛮长的程序,大概有一两千行。那麽当我们想浏览这份 Code 时,必然很难了解整体的结构,这时如果我们可以把函式的内容都「折」起来,不就能很轻易的看出这个程序有哪些主要的组成部份了吗?甚至,当我们在写这个程序时,如果有一些函式是不太需要再 review 过的,那为什麽不让它暂时不见,等到我们需要看这函式内容时,再把它打开来呢?

嗯,这时就需要 Folding 了,把暂时不要的部份给折起来,这样就可以让我们更专心处理其馀的部份了。


开始吧


嗯,做完简单介绍就不多说废话了,直接开始教大家这有趣的功 能。首先,先打开 Vim ,输入这段程序。


void fold()
{
int i;
if(1==1){
printf("hihi..");
printf("hihi..");
printf("hihi..");
printf("hihi..");
printf("hihi..");
}
for(i=0;i<10;i++){
printf("do nothing\n");
}
}
int main()
{
int a,b;
int c,d;

printf("hello folding");
printf("hello folding");
printf("hello folding");
fold();
}



这程序没什麽用,只是为了示范而已 :p

假设现在我们正在编辑 main 部份,然後 fold 这函式已经写好了,所以我们想暂时把 fold 函式给折起来,只留下 main 来让我们专心编辑。folding 的方法有好几种,默认则是 manual 模式,其馀还有 indent 、 expr 、marker 、 syntax 。这里先从 manual 模式开始。

manual 意味著你要手动决定你要折哪一个段落,你可以自己选要哪几行至哪几行,或者是哪一个 visual block 。现在我们想把整个 fold() 折起来,那麽只要在 void fold() 下面的那一个大括号 { 上面按 zf% ,就可以把整个 fold() 给暂时折起来了。( % 的功 用就自动比对括号。例如 d% 就可以删掉整组括号内的东西)

嘿,看到了神奇的效果了吧。这样相信大家(如果熟悉 Vi 的话)就可以马上举一反三,用 zf 来折 visual block ,或 paragraph 等等 ..

接下来,把它折起来後当然也要能打开,不然不就没有什麽用了吗 :P

打开的方法很简单,只要在那个被折起来的那一行上面按 zo ,就可以打开 folding 了。值得一提的是,如果你的 folding 中还有 folding ,例如你先把fold() 中的 if(){} 给折起来了,再把 fold() 整个折起来。这样用 zo 的话,就只能打开第一层的 folding 。所以呢,如果我们想打开底下全部摺叠起来的 code ,只要用 zO 就可以了。


进阶的 Folding 用法



indent mode
虽然说进阶,可是事实上也只是讲讲不同的 folding method 的用法而已。前面讲的是 manual 模式中,如何折叠与打开一段文章。接下来,我们来研究一下特别的情况。

首先,先把 folding method 设为 indent ,输入 :set foldmethod=indent这样可以让 Vim 自动依照缩排来折文章。
回到前面那个程序码,现在假如我们想把 fold() 中的 if 折起来,在 indent模式下,只要在 if 那个 block 里面随意一点按 zc ,这样就可以把那同一排的程序码折起来了。(这就是所谓的 indent mode )这样子的好处是,我们不必手动决定要折哪里,只要让 Vim 依照特定的规则(此处即是用 indent 的层数)自动来决定要折的部份就可以了。另外要注意的是, zf 只适用於 manual mode 或 marker mode 中,其馀的都要用 zc 让 Vim 自动作 folding 。

嗯,折起来有一点不同。可是打开就一样了, zo 或 zO 都可以打开 folding 。


marker mode
marker mode 有点类似 manual mode ,主要是利用一些标记来让 Vim 知道该把何处折起来。例如像以下这篇文章∶
1. 简介 {{{1
这里是 vim 6.0 的简介喔!
vim 6.0 多了很多好用的功 能!
}}}

2. 开始吧 {{{1

2.1 folding {{{2
folding 就是这篇文章在写的东西 :P
}}}

2.2 diff mode {{{2
diff mode 是 vim 6 另一个有趣的功 能之一喔!
}}}

}}}



用 {{{n }}} 包围起来的部份,就是一个可以被折起来的区块,至於那个数字 n 就是指第几层的 folding 。当我们用这种方式手动指定了需作 folding 的区块,只要在 {{{ 和 }}} 之间按 zc ,就可以把这个 fold给折起来了。

另外,还是提醒一下,用这 mode 前要先 :set foldmethod=marker


就这样而已
嘿! folding 其实大致上也就这样而已,剩下的其实只是一些杂项功 能。可以自己在 vim 中打 :help folding ,这样就能看到非常详细的介绍了。

底下条列出一部份 folding 相关指令。
zf 在 manual 和 marker 模式时,手动作个 fold 出来。

zF 前面加上 N ,可以把以下 N 行折起来。

:{range}fo[ld] 跟 zf 一样, Ex 命令而已。

zd 删除游标上的 fold 。

zo 打开游标上的 fold 。

zO 递回地打开游标上底下所有的 fold 。

zc 把游标上的 fold 折起来。

zC 递回地折起游标上底下所有的 fold 。

zM 把整个档案所有的 fold 都折起来。

zR 把整个档案所有的 fold 都打开。

:{range}foldo[pen][!] 同 zo , Ex 命令。

:{range}foldc[lose][!] 同 zc , Ez 命令。

zj 把游标移到下一个 fold 上。

zk 把游标移到上一个 fold 上。
嵌入式操作系统调试:【上一篇】
Shell 编程(1):【下一篇】
【相关文章】
  • 和luster一起学习在linux下使用汇编语言(3)
  • 和luster一起学习在linux下使用汇编语言(4)
  • 和luster一起学习在linux下使用汇编语言(5)
  • Before main() 分析
  • 关于PE可执行文件的修改(for windows)
  • Linux 内核开发者的实用技巧
  • 在linux平台上创建超小的ELF可执行文件
  • linux下糟糕的异常处理方式
  • 如何在Linux Kernel內新增一个System Call
  • Unix(Linux) C编程问题精粹
  • 【随机文章】
  • Windows下DNS ID欺骗的原理与实现
  • C#教程第二课:表达式,类型和变量
  • Linux Kernel Internals(3cont.)--Virtual Filesystem
  • 实验十二 地址转换配置
  • OLAP的介绍
  • VBScript 运行时错误
  • 你把生命当什么?
  • 语音的采集和播放
  • C++书籍推荐
  • 一个让用户更改密码的简单程序
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.