您没有来错地!为了更好的发展,黑基网已于9月19日正式更名为【安基网】,域名更换为www.safebase.cn,请卸载旧的APP并安装新的APP,给您带来不便,敬请理解!谢谢

黑基Web安全攻防班
安基网 首页 IT技术 网络管理 查看内容

谈Vim 6.0的Folding功能简介

2005-5-31 19:49| 投稿: Linux

摘要: Vim 6.0 多了超级好用的 Folding 功 能,这篇文章是为了让大家能快速了解使用方法而写的。在开始前,先准备好你的...
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 "); } } 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 上。

小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

最新

返回顶部