• 手把手教你将vim配置成一个C/C++的超级IDE


    转自:

    http://paul.xhblog.com/archives/2008/322824.shtml

    在没有怎么太深的接触vi/vim之前,也曾经搞不懂为什么有好多linux下的程序员说vi/vim是个超级的代码编辑器或者编译器,也有不少的 (我认 为是刚在linux编程不久的人)说,“。。头让门挤啦,有那么多功能强大的linux环境下的IDE不用,竟然就用个简单的vi/vim,不用说界面类 似DOS,连编译都要用命令。。”。。等等类似的评价吧。
          我开始也不懂它到底哪强大,但我仍坚持使用vim可以说是据以两点原因:
          1、既然有那么多的前辈说它强大,那么就必定有他的道理 
          2、我规定自己以后的发展方向是 The Embedded System on Linux,所以,在嵌入式硬件平台资源很有限的情况下,使用耗资大的IDE有点不现实,但是vi/vim却非常适合应用在这种硬件平台上。
          好了,其实我现在也是个linux下编程的新手,但我坚信我选择用vi/vim是正确的。
          下面我们就在Ubuntu7.10下用vi/vim搭建c/c++的编程环境,至于到底超不超级的,相信大家自有评价   ^.^
    注:本文主要参考和引用了 吴垠 的文章《手把手交你把Vim改装成一个IDE编程环境》, 地址:http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx

    如果涉及到版权问题,请通知我,我会及时处理 ^.^      不过该文章主要是用gvim在RedHat上搭建的,考虑到在嵌入式系统的硬件平台可能用不了gvim,故采用纯粹的vi/vim,而且主机环境为 Ubuntu7.10,这样,一些文件的安装路径可能和RedHat的有所区别,请读者自己注意吧 :)

          本文已经假设你已经升级到了完整版的Vim7.1.56,而且已经安装了如gcc和g++等必须的编译器。

    1、Vi/Vim中文帮助手册的安装。

           a、 下载帮助中文包http://vcd.gro.clinux.org/-》UN*X打包文件,我下到的是vimcdoc-1.6.0.tar.gz,解压后,进入到该解压后的文件夹vimcdoc-1.6.0,执行命令
          $ sudo ./vimcdoc.sh -i            //对中文帮助文件进行安装,详细可参考文件“INSTALL” 
          安装完成后, 在终端打开vi/vim,输入命令":help",即可看到,显示的帮助文件已经为中文了。
          b、vim编程常用命令():
           建议先看看帮助手册中的下面章节, 其中有关tags文件的部分你可以先跳过, 在后面的章节中会讲到, 到时候你在回来看看, 就觉得很简单了:
          :help usr_29
          :help usr_30
           下面是我常用的一些命令, 放在这里供我备忘:

    % 跳转到配对的括号去
    [[ 跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)
    gD 跳转到局部变量的定义处
    '' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
    mx 设置书签,x只能是a-z的26个字母
    `x 跳转到书签处("`"是1左边的键)
    > 增加缩进,"x>"表示增加以下x行的缩进
    < 减少缩进,"x<"表示减少以下x行的缩进


        2、语法高亮显示:

           编辑配置文件:$ sudo vi /etc/vim/vimrc ,取消掉“syntax on”的注释,就可以开启代码编辑时的语法高亮显示了,并增加设置“colorscheme murphy" ,其中murphy是配色方案, 所有的配色方案保存在目录“/usr/share/vim/vim71/colors”里,以“.vim”为结尾的文件。如果这里面没有你喜欢的主题,则 在vim.org上一定会有符合你胃口的主题。
           更炫的语法高亮:(
           你可能会发现很多东西没有高亮起来, 比如运算符号, 各种括号, 函数名, 自定义类型等, 但是看上面的图片, 我的运算符号和函数名都加亮了^_^, 想知道为什么吗? 哇哈哈哈哈.... 让我来教你吧 ...
          主要的思路是新建一个语法文件, 在文件中定义你要高亮的东东, 想高亮什么就高亮什么, 用vim就是这么自信. 所谓的语法文件就是vim用来高亮各种源文件的一个脚本, vim靠这个脚本的描述来使文件中的不同文本显示不同的颜色, 比如C语言的语法文件放在类似于这样的一个路径中: /usr/share/vim/vim71/syntax,在其中加入

    "======================================================== " Highlight All "======================================================== syn match c "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2 syn match c "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1 hi c gui=NONE guifg=#B5A1FF "======================================================== " Highlight All Math Operator "======================================================== " C math operators syn match cMathOperator display "[-+\*/%=]" " C pointer operators syn match cPointerOperator display "->\|\." " C logical operators - boolean results syn match cLogicalOperator display "[!<>]=\=" syn match cLogicalOperator display "==" " C bit operators syn match cBinaryOperator display "\(&\||\|\^\|<<\|>>\)=\=" syn match cBinaryOperator display "\~" syn match cBinaryOperatorError display "\~=" " More C logical operators - highlight in preference to binary syn match cLogicalOperator display "&&\|||" syn match cLogicalOperatorError display "\(&&\|||\)=" " Math Operator hi cMathOperator guifg=#3EFFE2 hi cPointerOperator guifg=#3EFFE2 hi cLogicalOperator guifg=#3EFFE2 hi cBinaryOperator guifg=#3EFFE2 hi cBinaryOperatorError guifg=#3EFFE2 hi cLogicalOperator guifg=#3EFFE2 hi cLogicalOperatorError guifg=#3EFFE2 "=============================================================================


          再打开你的C文件看看, 是不是又明亮了许多. 还有一个压箱底的要告诉你, 如果你自己增加了一个类型或者结构之类的, 怎么让
    它也象"int", "void"这样高亮起来呢? 再在上面的文件添加如下的设置:
    "========================================================
    " My Own DataType
    "========================================================
    syn keyword cType       My_Type_1 My_Type_2 My_Type_3

          3、在程序中跳来跳去:Ctags的使用
          你在读程序时看了一个函数调用, 或者一个变量, 或者一个宏等等, 你想知道它们的定义在哪儿, 怎么办呢?就用Ctag来实现这个功能:
          到http://ctags.sourceforge.net/下载,解压后顺序执行“./configure”、“make”、“make install”即可完成安装。
         
    然后去你的源码目录, 如果你的源码是多层的目录, 就去最上层的目录, 在该目录下运行命令ctags -R,现在以我的
    ~/download/anjuta-2.4.0/src/为例,

    $ cd ~/download/anjuta-2.4.0/
    $ ctags -R
    此时在~/download/anjuta-2.4.0/目录下会生成一个 tags 文件, 现在用vim打开~/download/anjuta-2.4.0/src/main.c           

    再在vim中运行命令:

    :set tags=~/download/anjuta-2.4.0/tags

    该命令将tags文件加入到vim中来, 你也可以将这句话放到vimrc中去, 如果你经常在这个工程编程的话.

    此时,将鼠标移到一个变量上后,按下Ctrl+],便会自动跳转到该变量的定义处,再按下Ctrl+T,便会返回到原来处。
    使用对象为变量, 结构, 宏, 等等, 都可以的, 赶快试试吧.....
    此时在回头学习一下第3节中说的vim手册吧
    :help usr_29


    不过还有一个小瑕疵, 你修改程序后, 比如增加了函数定义, 删除了变量定义, tags文件不能自动rebuild, 你必须手动再运行一下命令:

    $ ctags -R

    使tags文件更新一下, 不过让人感到欣慰的是vim不用重新启动, 正在编写的程序也不用退出, 马上就可以又正确使用<C-]>和<C-T>了.



    4、教你高效的浏览源码--插件:Taglist
    下载地址 http://www.vim.org/s/.php?_id=273
    版本 4.5
    下载完成并解压缩后,将相应的插件和doc复制到vim目录:

    h-jingbo@Ubuntu:/usr/share/vim/vim71$ sudo cp /home/h-jingbo/download/plugin/taglist.vim plugin/

    h-jingbo@Ubuntu:/usr/share/vim/vim71$ sudo cp /home/h-jingbo/download/doc/taglist.txt doc/

            由于以前已经安装过了中文的help文件,所以在vi中输入命令 :help taglist.txt是会提示找不到该帮助文件,可能是由于已经更改了vim的帮助文件的路径了吧,这就不详细研究了。
            为了显示Tlist的窗口的关闭于打开合适些,在文件 /etc/vim/vimrc 配置文件中加入下列的设置:

    let Tlist_Show_One_File=1
    let Tlist_Exit_OnlyWindow=1

           用vim打开一个程序代码后,执行命令 : Tlist,即可看到形如下面的界面:

    500)this.width=500;">

            其中,左面的窗口为运行Tlist形成的窗口,右边为该文件的源代码,在不同的窗口间,可以用Ctrl+两次W进行切换,TagList窗口, 其中列出了main.c文件中的tag, 并且按照"typedef", "variable", ""等进行了分类. 将光标移到左侧的如图所示的变量, 按下回车后, 源程序会自动跳转到该变量的定义处,这就是TagList最基本也是最常用的操作. 再教你一个常用的操作, 你在浏览TagList窗口时, 如果还不想让源码跳转, 但是想看看tag在源码中完整的表达, 可以将光标移到你想要看的tag上, 然后按下空格键, 在下面的命令栏中, 如图下边含“=0”字样的方框, 会显示该tag在源码中完整的写法, 而不会跳转到源码处.
           TagList插件我就介绍到这里, 其实它还有很多用法和设置, 我没法一一地教你了, 好在TagList有一份详细的帮助手册 taglist.txt, 有时间好好钻研下吧 : )

           5、文件浏览和窗口管理器--插件:WinManager
    下载地址 http://www.vim.org/s/.php?_id=95
    版本 2.x
    手册 :help winmanager

           当我们打开vi,执行命令 “:e ~/download/anjuta-2.4.0/src/”时,可以看到如下的画面,

    500)this.width=500;">

         可以发现,会显示我的路径“~/download/anjuta-2.4.0/src/”下的文件目录,这个功能就是由vi默认的以安装的插件netrw.vim实现的,
    在该界面上你可以用下面的一些命令来进行常用的目录和文件操作:

    <F1> 显示帮助
    <cr> 如果光标下是目录, 则进入该目录; 如果光标下文件, 则打开该文件
    - 返回上级目录
    c 切换vim 当前工作目录正在浏览的目录
    d 创建目录
    D 删除目录或文件
    i 切换显示方式
    R 文件或目录重命名
    s 选择排序方式
    x 定制浏览方式, 使用你指定的程序打开该文件


             我这里不是教你怎么用netrw.vim插件, 而是要教你通过WinManager插件来将TagList窗口和netrw窗口整合起来,在文件/etc/vim/vimrc中加入下面的两句配置:

    let g:winManagerWindowLayout='FileExplorer|TagList'
    nmap wm :WMToggle<cr>

    我打开~/download/anjuta-2.4.0/src/目录下的main.c的源文件,在normal状态下输入"wm",可以看到如下:

    500)this.width=500;">

               其中左上边是netrw窗口, 左下边是TagList窗口, 当再次输入"wm"命令时这两个窗口又关闭了.

             WinManager的功能主要就是我介绍的这些, 但是它还有其他一些高级功能, 还可以支持其他几个插件, 如果你觉得我介绍的还不够你用, 建议你把它的帮助手册好好研究一下,就是插件压缩包中doc里的文件。

      6、Cscope的使用:

           这下更厉害了, 用Cscope自己的话说 - "你可以把它当做是超过频的ctags", 其功能和强大程度可见一斑吧, 关于它的介绍我就不详细说了, 如果你安装好了前文介绍的中文帮助手册, 用下面的命令看看介绍吧:

    :help if_cscop.txt

          我在这里简单摘抄一点, 供还在犹豫的朋友看看:
    Cscope 是一个交互式的屏幕下使用的工具,用来帮助你:
    * 无须在厚厚的程序清单中翻来翻去就可以认识一个 C 程序的工作原理。
    * 无须熟悉整个程序就可以知道清楚程序 bug 所要修改的代码位置。
    * 检查提议的改动 (如添加一个枚举值) 可能会产生的效果。
    * 验证所有的源文件都已经作了需要的修改;例如给某一个现存的函数添加一个参数。
    * 在所有相关的源文件中对一个全局变量改名。
    * 在所有相关的位置将一个常数改为一个预处理符号。

    它被设计用来回答以下的问题:
    * 什么地方用到了这个符号?
    * 这是在什么地方定义的?
    * 这个变量在哪里被赋值?
    * 这个全局符号的定义在哪里?
    * 这个函数在源文件中的哪个地方?
    * 哪些函数调用了这个函数?
    * 这个函数调用了哪些函数?
    * 信息 "out of space" 从哪来?
    * 这个源文件在整个目录结构中处于什么位置?
    * 哪些文件包含这个头文件?

    下载地址 http://cscope.sourceforge.net
    版本 15.x

         安装和往常一样,解压-》“./configure”“make”“make install”,这些都需要root权限。
    在/etc/vim/vimrc增加以下设置:

    :set cscopequickfix=s-,c-,d-,i-,t-,e-    

    这个是设定是否使用 quickfix 窗口来显示 cscope 结果, 用法在后面会说到。
    跟Ctags一样, 要使用其功能必须先为你的代码生成一个cscope的数据库, 比如我的项目在“~/download/anjuta-2.4.0”,则在该目录下运行下面的命令:

    $ sudo cscope -Rbq
    # 此后会生成三个文件
    $ ls -l cscope.*
    -rw-r--r-- 1 root root 1318912 2008-03-26 21:18 cscope.in.out
    -rw-r--r-- 1 root root 7843983 2008-03-26 21:18 cscope.out
    -rw-r--r-- 1 root root 5553000 2008-03-26 21:18 cscope.po.out
    # 打开文件, 开始Coding
    $ cd src
    $ vi main.c

    进入vim后第一件事是要把刚才生成的cscope文件导入到vim中来, 用下面的命令:

    :cs add ~/download/anjuta-2.4.0/cscope.out ~/download/anjuta-2.4.0

    上面这条命令很重要, 必须写全, 不能只写前半句:
    :cs add ~/download/anjuta-2.4.0/cscope.out
    因为源码是多级目录的, 如果这样写, cscope是无法在子目录中的源码中工作的, 当然, 如果你的源码都在同一级目录中就无所谓了. 如果你要经常用cscope的话, 可以把上面那句加到vimrc中去.
    下面我们来操练一下, 查找函数vim_strsave()的定义, 用命令:

    :cs find g get_real_path

    如下图:

    500)this.width=500;">

    按下回车后会自动跳转到get_real_path()的定义处. 此时你肯定会说Ctags也可以做到这个呀, 那么下面说的这个Ctags就无法做到了, 我想查找get_real_path()到底在那些地方被调用过了, 用命令:

    :cs find c get_real_path

    按下回车后vim会自动跳转到第一个符合要求的地方, 并且在命令栏显示有多少符合要求的结果, 如图:

    500)this.width=500;">

    如果自动跳转的位置你不满意, 想看其他的结果, 可以用下面的命令打开QuickFix窗口:

    :cw

    如图:

    500)this.width=500;">

    这时你就可以慢慢挑选了^_^(当然,这里只有一处调用了。。。举例不当,哈哈)

  • 相关阅读:
    等宽布局和flex
    antd按需加载
    linux-redis cluster集群(redis5.x)
    linux-mysql-主从同步
    mysql-行转列
    Spring Bean 作用域
    ArrayList、LinkedList区别(jdk8)
    java类及实例初始化顺序
    线程池-结构
    GIT基础
  • 原文地址:https://www.cnblogs.com/VortexPiggy/p/2517655.html
Copyright © 2020-2023  润新知