WOOIN的Linux专栏

因缘合成,无有实体,犹如过眼云烟,虚而不实,求不得,拿不走

原创 手把手教你把Vim改装成一个IDE编程环境(图文) -- 续1收藏

新一篇: 也晒一下我的Linux玩具清单 | 旧一篇: 我的vimrc

手把手教你把Vim改装成一个IDE编程环境(图文)

By:

吴垠

Date:

2007-12-27

Email:

lazy.fox.wu#gmail.com

Homepage:

http://blog.csdn.net/wooin

Copyright:

该文章版权由吴垠和他可爱的老婆小包子所有。可在非商业目的下任意传播和复制。对于商业目的下对本文的任何行为需经作者同意。
联系方式:lazy.fox.wu#gmail.com


16

代码折叠 (fold)

 

代码折叠功能是现在流行的IDE中都具备具备的最基础的一项功能, 甚至一些编辑器也有代码折叠的功能了, 比如UltraEdit, Kate....等等, vim当然在这方面也不会落后与人, 关于代码折叠的介绍大家可以看看帮助手册中的这些章节, 反正都是中文, 不会让我再翻译成汉语拼音给你看吧^_^

:help usr_28.txt
:help fold.txt

我简单摘抄一点, 省得我自己还要打字....
*28.1*   
什么是折叠?
折叠用于把缓冲区内某一范围内的文本行显示为屏幕上的一行。就像一张纸,要它缩短
些,可以把它折叠起来:
    +------------------------------------+
    |
1                              |
    |
2                             |
    |
3                             |
    |________________________|
    \                                            \
     \________________________\
     /
被折叠的行                        /
    /________________________/
    |
12                                  |
    |
13                            |
    |
14                                  |
    +-----------------------------------+

那些文本仍然在缓冲区内而没有改变。受到折叠影响的只是文本行显示的方式。
折叠的好处是,通过把多行的一节折叠成带有折叠提示的一行,会使你更好地了解对文本
的宏观结构。
真实的情景见下图(19):


(--- 19 ---)
vim
提供以下6种方法来选定折叠方式:

manual

手工定义折叠

indent

更多的缩进表示更高级别的折叠

expr

用表达式来定义折叠

syntax

用语法高亮来定义折叠

diff

对没有更改的文本进行折叠

marker

对文中的标志折叠

可用选项 'foldmethod' 来设定折叠方法。比如, 如果想按照语法高亮来定义折叠, 则在
~/.vimrc
中增加下面这行:

set foldmethod=syntax
set foldlevel=100  "
启动vim时不要自动折叠代码

这里主要是讲编程的, 所以我就只介绍按照语法高亮来折叠代码, 其他的折叠方法如果大家想用的话可以自己看看帮助手册, 大同小异的.

按照语法高亮来折叠代码, 其实就是按照代码中的一些括号来定义折叠位置, 比如: "{ }", "/* */". 现在练习一下, 就在nomal模式下输入命令"za", 你会发现当前光标所在的最近的一层括号被折叠起来了, 再输入一遍"za"命令, 这个折叠又打开了, "za"命令就是打开/关闭当前折叠用的, 下面是常用的一些命令:

za

打开/关闭当前折叠

zA

循环地打开/关闭当前折叠

zo

打开当前折叠

zc

关闭当前折叠

zM

关闭所有折叠

zR

打开所有折叠

其他还有一些我不常用的设置和命令大家可以自己看看帮助手册吧, 我就不罗嗦了.

17

提示函数原形-- 插件: echofunc

 

下载地址

http://www.vim.org/scripts/script.php?script_id=1735

版本

1.18

安装

echofunc.vim 文件丢到 ~/.vim/plugin 文件夹就好了

手册

 

当编程调用一个函数时, 最可恶的是忘了这个函数参数列表的详细定义了, 然后要跳转到定义处看看, 再跳转回来继续写, 如果参数列表太长了, 还要来回跳转多次, 对我等记性不好的人来说简直是折磨, 还好有贴心的人写了这个插件, 让我可以把精力放在Coding, 真是伟大呀, 作者的名字叫:
Ming Bai <mbbill AT gmail DOT com>
Wu Yongwei <wuyongwei AT gmail DOT com>
看样子是汉人, 而且还有一个是我本家, 这个猜测令我兴奋不已呀...

言归正传, 该插件的作用是当你在vim插入(insert)模式下紧接着函数名后输入一个"("的时候, 这个函数的声明就会自动显示在命令行中. 如果这个函数有多个声明, 则可以通过按键"Alt+-""Alt+="向前和向后翻页, 这个两个键可以通过设置EchoFuncKeyPrevEchoFuncKeyNext参数来修改. 见下图(20)就是这种应用, 你先不要急着试, 先看完我下面的介绍


(--- 20 ---)
如果想看到上图的效果, 还有一个要注意的地方, 这个插件的功能需要tags文件的支持, 并且在创建tags文件的时候要加选项"--fields=+lS", 整个创建tags文件的命令如下:

$ ctags -R --fields=+lS

如果你还不会用tags文件, 先看看前面的章节<在程序中跳来跳去: Ctags 的使用>. tags文件都弄好了后, 就可以试试效果了, 是不是跟我上图一样呀^_^

还有一个小技巧告诉你, 当你把鼠标放在函数名上的时候会有一个tip窗口弹出, 该窗口中也会有函数的声明, 这个功能需要你在编译vim时编译"+balloon_eval"特性了.

 

 

发表于 @ 2007年12月30日 10:12:00|评论(loading...)|编辑

新一篇: 也晒一下我的Linux玩具清单 | 旧一篇: 我的vimrc

评论

#weiye 发表于2008-01-09 09:29:53  IP: 202.106.180.*
精彩。
看vim.sf.net上增强注释的插件好多,不知道哪个比较好用,博主可有推荐?
#hongmy525 发表于2008-01-09 17:42:43  IP: 218.108.51.*
继续顶~~,好文~,受益非浅
#ken107 发表于2008-01-09 22:37:08  IP: 121.8.14.*
小菜鸟我还能说什么呢……
望文兴叹啊……
连本来打算找什么资料都忘了,赶快收藏!
#huoer 发表于2008-01-09 23:30:00  IP: 221.216.5.*
狂顶楼主。另外想知道有没有可以在浏览器中预览当前文件的插件。win系统下。要支持apache执行php等文件的。找了好久没找到。
#吴垠 发表于2008-01-10 10:34:49  IP: 121.35.242.*
看vim.sf.net上增强注释的插件好多,不知道哪个比较好用,博主可有推荐?
================
我用过这个注释插件 -- The NERD Commenter
他的特点是可以注释多种语言,包括c/c++, Makefile, shell等等...

但是我现在用的是CVim, 一个c语言的插件, 他提供了很多c语言的功能,也包括注释功能, 够我用了...

你是写什么语言的程序呢?
#吴垠 发表于2008-01-10 10:39:24  IP: 121.35.242.*
另外想知道有没有可以在浏览器中预览当前文件的插件。win系统下。要支持apache执行php等文件的。
=========================
不好意思, 没太懂你的意思呀...
#Fisherman 发表于2008-01-11 16:03:01  IP: 222.171.15.*
ipconfigme@gmail.com
帮忙发一份pdf版的 :)
#FireVim 发表于2008-01-16 23:54:57  IP: 125.97.13.*
一直没有del windows的原因就是source insight,
原来也用vi,看到楼主的文章很兴奋。谢谢楼主的精神。
p.s 请发一份pdf给我,想收藏一下。辛苦了。

kernelnewbier@gmail.com
#mbbill 发表于2008-01-17 16:07:37  IP: 61.152.175.*
你猜的没错^_^
echofunc现在一直是吴咏伟在维护,辛苦他了。
http://sourceforge.net/projects/vimgadgets
这里还有一些有趣的东西,echofunc的最新版也可以在这里找到
#wooin 发表于2008-01-17 21:05:36  IP: 58.61.87.*
mbbill兄,你跟吴咏伟都辛苦了,支持你们,支持国货。。。
#Hsxzhe 发表于2008-01-19 13:04:44  IP: 58.252.15.*
不好意思,刚才没看到楼主的信息,还在以前那个贴发.
现转到这
请楼主发一份给我!
heshanxingzhe@163.com
谢谢了!!
#deluruanchina 发表于2008-01-23 15:45:17  IP: 116.76.138.*
楼主,佩服佩服!

我认认真真的做了一遍,受益匪浅啊!

楼主太太万岁,楼主万岁!!!

请楼主发一份给我!
deluruanchina@yahoo.com
谢谢了!!
#leexiao 发表于2008-01-23 19:58:35  IP: 222.190.111.*
还有自动补全对c语言的结构体好像不起作用
楼主,发一份给我
lixiao_198209@163.com
#yangwulin 发表于2008-01-24 14:09:34  IP: 125.118.28.*
请给我一份,谢谢!
yangwulin001@163.com
#xiaozhou 发表于2008-01-24 22:39:55  IP: 211.103.75.*
楼主辛苦了,发我一份吧:zhoucheng1207@gmail.com
谢谢!
#wooin 发表于2008-01-25 21:42:56  IP: 116.24.43.*
====================================
我是楼主
====================================
多谢各位的捧场,如果有想要PDF版的直接给我发邮件吧,不要在这里回复留邮箱了。。。
#jiemnij 发表于2008-01-29 11:14:03  IP: 60.162.150.*
楼主..你的函数名高亮怎么配置的..
另为..能不能共享一下你的c.vim和颜色配置啊.
谢谢...
配置了很久.感觉都没有你网上的截图看的舒服...

#gongkai1000 发表于2008-01-30 11:00:17  IP: 123.120.159.*
想要一份pdf的gongkai@salala.com.cn ,谢谢!
#wooin 发表于2008-01-31 20:49:26  IP: 121.35.138.*
楼主..你的函数名高亮怎么配置的..
另为..能不能共享一下你的c.vim和颜色配置啊.
谢谢...
配置了很久.感觉都没有你网上的截图看的舒服...
=================================
《第4节 语法高亮》中的那个表中“Highlight All Function”就是高亮函数名的呀。。。
#colin 发表于2008-03-27 23:44:04  IP: 210.41.107.*
最重要的是,请问有调试器的功能吗????
#wooin 发表于2008-03-28 22:12:00  IP: 116.24.43.*
呵呵,调试是个难题,但是也有不少gdb的插件,我试了几个都不好用,你可以再http://www.vim.org/scripts上找找,好用的话记得跟大家共享。。。
#呵呵 发表于2008-03-29 13:01:05  IP: 218.33.145.*
我写的可以用带颜色的数字标明marks的小脚本,也可以保存你的marks。 可以在不同的文件中定义marks。

http://www.vim.org/scripts/script.php?script_id=2194
#呵呵 发表于2008-03-29 16:42:39  IP: 218.33.145.*
给你个抓图
http://byfiles.storage.live.com/y1pTxV2rr3Z0vLz37q2gXKsjH2oUIV6W7B47AbysRmCKXqkHSpAk-V-je_Kh-psmDOvgJE8afIFD7I
#eyeye 发表于2008-03-31 14:44:24  IP: 60.176.38.*
我想请教一下关于你那个 c.vim 的语法高亮文件
为什么我的只有 Gvim下才有效呢`!?
vim 却没有作用(函数名没有高亮)。。。
但是vim的确加载了那个文件拉。。。
还请楼主帮忙说明一下!
先 谢谢了!
#wooin 发表于2008-03-31 21:22:43  IP: 59.40.217.*
其实让函数名高亮的是下面这几句:
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunction gui=NONE guifg=#B5A1FF

你单独试试这几句看,在gvim中跟vim应该是一样的才对呀?
#daqiang 发表于2008-04-16 17:39:05  IP: 218.247.216.*
谢谢楼主
我也来一份daqiang430@163.com
#mingyuezhaotianshan 发表于2008-04-17 03:03:40  IP: 82.130.8.*
Hi:
多谢楼主大作,受益菲浅!
我有个问题想问一下,ctags和cscope搜索后返回的快捷键好像都是ctrl+t,用cscope搜索后ctrl+t无法返回,提示at bottom of tag stack. 似乎ctags已经占用了这个快捷键。有没有什么办法使用cscope搜索后快速返回?
#sprocessor 发表于2008-04-22 10:46:16  IP: 222.247.73.*
多谢博主
能给我发一份吗
21064310li@163.com
#slain.carmick 发表于2008-05-02 17:42:52  IP: 218.69.146.*
I wanna one pdf file.
slain.carmick@gmail.com
Thanks alot,
#chambers_qian 发表于2008-05-17 19:14:13  IP: 218.202.156.*
我也想要一份pdf文档,楼上的确实不错
#wenziyong 发表于2008-06-06 13:11:07  IP: 59.41.221.*
This paper is very very useful,
I wanna one pdf file.
would you mind send it to wen_zy@163.com
thanks
#endall 发表于2008-06-20 15:58:05  IP: 202.115.138.*
把楼主的这两遍文章看完了,装上了不少插件,使用也方便了很多。
感谢楼主提供给我们的不仅是几个插件,而且让我们对VIM有了新的认识,对linux下面编程有了新的认识,在linux下编程很多方面都豁然开郞了
#wooin 发表于2008-06-27 22:37:12  IP: 121.34.28.*
Re:endall
那我的目的就达到了^_^
发表评论  


登录
Csdn Blog version 3.1a
Copyright © Lazy Fox