文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>谈Vim 6.0的Folding功能简介

谈Vim 6.0的Folding功能简介

时间:2007-02-17  来源:PHP爱好者

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 nothingn");
}
}
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 上。
php爱好者站 http://www.phpfans.net php基础|php进阶|php模板.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载