zoukankan      html  css  js  c++  java
  • VIM使用系列之一——配置VIM下C/C++编程环境

    作者:gnuhpc from http://blog.csdn.net/gnuhpc
    本文环境:ubuntu 9.10

    1.基本配置
    建立三个目录:mkdir ~/.vim/{plugin,doc,syntax} –p
    建立配置文件:touch ~/.vimrc

    vimrc作为vim的主要配置文件,我们在配置VIM时首先对它进行基本的设置。打开你home目录下的.vimrc文件。进行如下配置:

    "基本配置
    set wildmenu
    "增强模式中的命令行自动完成操作
    set foldmethod=manual
    "设定折叠方式为手动
    set helplang=cn
    "设置帮助的语言为中文
    set cin   
    "实现C程序的缩进
    set sw=4  
    "设计(自动) 缩进使用4个空格
    set sta   
    "插入时使用'shiftwidth'
    set backspace=2
    "指明在插入模式下可以使用删除光标前面的字符
    syntax enable
    "设置高亮关键字显示
    set nocompatible
    "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
    set number
    "显示行号
    filetype on
    "检测文件的类型
    map :q
    set history=1000
    ""记录历史的行数
    set background=dark
    "背景使用黑色
    syntax on
    "语法高亮度显示
    set autoindent
    set smartindent
    "上面两行在进行编写代码时,在格式对起上很有用;
    "第一行,vim使用自动对起,也就是把当前行的对起格式应用到下一行;
    "第二行,依据上面的对起格式,智能的选择对起方式,对于类似C语言编写上很有用
    "第一行设置tab键为4个空格,第二行设置当行之间交错时使用4个空格
    set tabstop=4
    set shiftwidth=4
    set showmatch
    "设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
    set ruler
    "在编辑过程中,在右下角显示光标位置的状态行
    set incsearch
    "查询时非常方便,如要查找book单词,当输入到/b时,会自动找到第一
    "个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依
    "次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词
    "时,别忘记回车。
     set enc=chinese
    "设置编码为中文
    set winaltkeys=no
    "Alt组合键不映射到菜单上
    保存文件,退出。

    2.安装中文帮助手册
    下载地址:http://vimcdoc.sourceforge.net/
    安装:
    $tar xvf vimcdoc-1.7.0.tar.gz

    $ cd vimcdoc-1.7.0/

    $ ./vimcdoc.sh –i

    然后在~/.vimrc 加上set helplang=cn 这句话表明帮助文档为中文。

    3.安装C-support--加速C/Cpp开发
    下载地址:http://www.vim.org/scripts/script.php?script_id=213

    安装:
    将下载的文件放到~/.vim目录中

    $ cd ~/.vim

    $ unzip cvim.zip在.vimrc中添加 filetype plugin on 使能该插件。
    使用方法:
    1)自动添加文件头:
    添加你自己的信息: vim ~/.vim/c-support/templates/Templates
    ~/.vim/c-support/templates 这个目录下还有许多模板,你可以自己定制。
    现在试着vim test.c看一看效果。
    2)使用热键
    主要是一些模板的插入,种类几乎覆盖C/C++开发中大多数需要手动输入的东西。不过我不是很喜欢它的默认模板的代码风格,不过可以通过上述的目录中的文件去定制。这个功能在后边的code complete插件中也提供了。
    另外一部分是编译运行的快捷键。
    还有一个把另一个文件内容直接灌入当前文件的功能。
    有关使用热键的方法见一个文档:http://lug.fh-swf.de/vim/vim-c/c-hotkeys.pdf
    3)编译文件
    快捷键:
    修改c.vim文件,查找f9,将包含link的那一行注释掉,并且对save and compile 那一行从A-F9修改为F9
           F9     编译
      Ctrl-F9   执行
     Shift-F9   设置命令行参数

    4.安装Exuberant Ctags + Tag list + WinManager——分析源码中Tags(function, class, variable, etc) 并且列出—— 在VIM中自由的查看源代码
    Exuberant Ctags 下载安装:sudo apt-get install exuberant-ctags
    Teh List下载地址:http://www.vim.org/scripts/download_script.php?src_id=7701
    安装:解压到home目录下的.vim子目录中。
    WinManager(调整窗口布局)下载地址:http://www.vim.org/scripts/script.php?script_id=95
    安装:解压到home目录下的.vim子目录中。
    配置:
    进入$HOME/.vim/doc打开 Vim 运行 ":helptags ." 这个是要保证taglist帮助可以正常使用。其实平时也不太会用到。
    生成系统API的tags:(具体为什么采用这样的参数请参考ctags命令行帮助)
    ctags -R -f ~/.vim/systags --c-kinds=+p -- c++ - kinds= + px -- fields= + iaS -- extra= + q /usr/include /usr/local/include
    随后在vimrc中添加如下几行:

    "禁止自动改变当前Vim窗口的大小
    let Tlist_Inc_Winwidth=0
    "把方法列表放在屏幕的右侧
    let Tlist_Use_Right_Window=1
    "让当前不被编辑的文件的方法列表自动折叠起来, 这样可以节约一些屏幕空间
    let Tlist_File_Fold_Auto_Close=1
    "映射F4为功能键调出tages浏览器
    "映射F3为功能键调出winmanager的文件浏览器
    "let g:winManagerWindowLayout='FileExplorer|TagList' "你要是喜欢这种布局可以注释掉这一行
    map :TlistToggle
    map :WMToggle
    "将当前的工程的tags导入
    set tags=./tags
    "将系统已经生成的tags导入
    set tags+=~/.vim/systags


    使用方法:按F4 调出函数、变量等tags,按F3出现文件管理器。 例如:把光标移动到某个元素上,CTRL+],就会跳转到对应的定义

    5.安装cscope——升级的Ctags
    下载 安装:sudo apt-get install cscope
    在vimrc中添加

    map :call Do_CsTag()//以后按F12就可以对一个工程进行tags索引建立并且引入了
    nmap s :cs find s =expand("")   
    nmap g :cs find g =expand("")   
    nmap c :cs find c =expand("")   
    nmap t :cs find t =expand("")   
    nmap e :cs find e =expand("")   
    nmap f :cs find f =expand("")   
    nmap i :cs find i ^=expand("")$
    nmap d :cs find d =expand("")
    function Do_CsTag()
        if(executable('cscope') && has("cscope") )
            if(g:iswindows!=1)
                silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' -o -name '*.cxx' -o -name '*.hxx'> cscope.files"
            else
                silent! execute "!dir /b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
            endif
            silent! execute "!cscope -bq"
            if filereadable("cscope.out")
                execute "cs add cscope.out"
            endif
        endif
    endf


    使用:F12生成这个目录及其子目录的索引,然后将光标指向一些函数名或者变量名,使用Crtl+\+以下字母


    s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
    g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
    d: 查找本函数调用的函数
    c: 查找调用本函数的函数
    t: 查找指定的字符串
    e: 查找egrep模式,相当于egrep功能,但查找速度快多了
    f: 查找并打开文件,类似vim的find功能
    i: 查找包含本文件的文件

    6.安装A——同名头文件和源文件切换
    下载:http://www.vim.org/scripts/script.php?script_id=3 1

    将a.vim 放到 ~/.vim/plugin 文件夹中
    使用: 在源文件或者头文件中输入:A就可以切换了。

    7.安装code_complete——函数、模板自动补全
    下载地址:http://www.vim.org/scripts/script.php?script_id=1764
    把插件文件中的tab都改为C-b防止与后来我们要安装的supertab冲突。
    将下边这一段加入到template段中以添加bash模板补全功能

    -----------------------------------------------
    "Bash Templates
    "Bash Structure by warmbupt@gmail.com
    let g:template['sh'] = {}
    let g:template['sh']['sif'] = "if ".g:rs."...".g:re." ; then\".g:rs."...".g:re."\fi"
    let g:template['sh']['sife'] = "if ".g:rs."...".g:re." ; then\".g:rs."...".g:re."\else\".g:rs."...".
                \g:re."\fi"
    let g:template['sh']['scase'] = "case ".g:rs."...".g:re." in\".g:rs."...".g:re.")\\" .g:rs."...".g:re.";;\\".
                \g:rs."...".g:re.")\\" .g:rs."...".g:re.";;\\\esac\"
    let g:template['sh']['swhile'] = "while ".g:rs."...".g:re." \do\".g:rs."...".g:re."\done"
    let g:template['sh']['suntil'] = "until ".g:rs."...".g:re." \do\".g:rs."...".g:re."\done"
    let g:template['sh']['sfor'] = "for ".g:rs."...".g:re." in " .g:rs."...".g:re."\do\".g:rs."...".g:re."\done"
    let g:template['sh']['sselect'] = "select ".g:rs."...".g:re." in " .g:rs."...".g:re."\do\".g:rs."...".g:re."\done"

    使用:在输入函数时可以出现原型提示是安装这个插件的主要目的。Crtl+b是万能的,比如输入pthread_cre,然后Crtl+b就可以看到效果了。

    8.安装supertab+snipMate+echofunc——超级补全
    下载地址:
    http://www.vim.org/scripts/script.php?script_id=1643
    http://www.vim.org/scripts/script.php?script_id=2540
    http://www.vim.org/scripts/script.php?script_id=1735
    安装:用vim打开supertab.vba ,然后使用:so % 进行安装。后两者直接解压在.vim目录里即可。
    使用:使用tab就可以完成一些文件中已经出现的词汇的补全和常见结构的补全了,这个功能与code_complete的结构快速补充有所重叠,不过是使用tab键,你还可以在.vim/snippets目录里自己定制。对于函数原型提示和补全,你可以试着输入select(就可以看到了下边的原型提示了),shift+tab转换对应原型,并且在结合code_complete的Ctrl+b还可以进行直接补全。

    9.安装astyle——代码格式整理
    下载安装:$sudo apt-get install astyle

    在vimrc中写入:

    "定义源代码格式化
    map :call FormartSrc()
    "定义FormartSrc()
    func FormartSrc()
    exec "w"
    "C程序,Perl程序,Python程序
    if &filetype == 'c'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'cpp'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'perl'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'py'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    "Java程序
    elseif &filetype == 'java'
    exec "!astyle --style=java --suffix=none %"
    exec "e! %"
    elseif &filetype == 'jsp'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'xml'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'html'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'htm'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    endif
    endfunc
    "结束定义FormartSrc

    使用:F11直接格式化源代码

    10.安装NERD_tree——多tab支持
    下载地址:http://www.vim.org/scripts/script.php?script_id=1658
    安装:解压到.vim目录即可
    "设置tab的快捷键
    "Shift+t为新建一个标签,按两次Shirt+t为跳转标签
    map :tabnew .
    map :tabnext
    使用:Shift+t就可以新建一个标签,连按Shfit+t两次就可以切换标签。

    11.生成STL库tags——
    下载地址:http://www.vim.org/scripts/script.php?script_id=2358
    解压后运行ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ cpp_src

    将其移动到.vim目录:mv tags ../.vim/stltags
    然后在vimrc中添加:set tags+=~/.vim/stltags
    另外还需要omnicppcomplete  下载地址:http://www.vim.org/scripts/script.php?script_id=1520
    这样就ok了。

    12.定义一些常用的功能:

    "设置建立新行但是不插入
    map o
    "设置全选快捷键
    map ggVG
    "设置快速不保存退出快捷键
    map :q!:q!:q!

    "替换
    map :L1,L2s/src/tar/g
    imap

    "设置快速注释键
    "F10是在该行后边添加注释,Shift+F10为注释掉该行,两次Shift+F10是去掉改行的注释,然后将光标置于下一行
    map I//
    map! I//
    map 02x
    map! 02x
    map $a//
    map! $a//

    "设置编译快捷键
    "F5为make,两次F5为make clean
    "F6为quickfix,查看详细信息, 两次F6关闭详细信息
    "F7为下一个结果,两次F7为上一个结果
    "F8为编译和运行单个程序、两次F8为调试
    map :make
    map :make clean
    map :cw
    map :ccl
    map :cn
    map :cp
    map :call CompileRun()
    map :call Debug()


    "定义CompileRun函数,用来对不用外接库的小程序进行编译和运行,自己可以根据文件名扩展或实际情况修改参数
    func CompileRun()
    exec "w"
    "C程序
    if &filetype == 'c'
    exec "!gcc % -g -o %<"
    exec "!.\/%<"
    endif
    endfunc
    "结束定义CompileRun

    "定义Debug函数,用来调试小程序
    func Debug()
    exec "w"
    "C程序
    if &filetype == 'c'
    exec "!rm %<"
    exec "!gcc % -g -o %<"
    exec "!gdb %<"
    elseif &filetype == 'cpp'
    exec "!rm %<"
    exec "!g++ % -g -o %<"
    exec "!gdb %<"
    "Java程序
    exec "!rm %<.class"
    elseif &filetype == 'java'
    exec "!javac %"
    exec "!jdb %<"
    endif
    endfunc
    "定义dubug结束

    autocmd BufNewFile *.cc,*.sh,*.java exec ":call SetTitle()"
    "新建.cc,.java,.sh,
    "定义函数SetTitle,自动插入文件头
    func SetTitle()
    "如果文件类型为.sh文件
    if &filetype == 'sh'
    call setline(1, "\#!/bin/bash")
    call append(line("."), "\#########################################################################")
    call append(line(".")+1, "\# Author: gnuhpc(http://blog.csdn.net/gnuhpc)")
    call append(line(".")+2, "\# Created Time: ".strftime("%c"))
    call append(line(".")+3, "\# File Name: ".expand("%"))
    call append(line(".")+4, "\# Description: ")
    call append(line(".")+5, "\#########################################################################")
    call append(line(".")+6, "")
    else
    call setline(1, "/*************************************************************************")
    call append(line("."), " Author: gnuhpc(http://blog.csdn.net/gnuhpc)")
    call append(line(".")+1, " Created Time: ".strftime("%c"))
    call append(line(".")+2, " File Name: ".expand("%"))
    call append(line(".")+3, " Description: ")
    call append(line(".")+4, " ************************************************************************/")
    call append(line(".")+5, "")
    endif
    endfunc

    "自动将shell脚本设置为可执行权限
    au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent !chmod a+x | endif | endif
    "保存上次打开的位置

    if has("autocmd")

       autocmd BufRead *.txt set tw=78

       autocmd BufReadPost *

          \ if line("'\"") > 0 && line ("'\"") <= line("$") |

          \   exe "normal g'\"" |

          \ endif

    endif

    总结一下现在可以使用的快捷键:

    F3                   文件浏览器
    F4                   Tags浏览器
    F5                   make
    2*F5               make clean
    F6                   quickfix查看详细信息
    2*F6               关闭详细信息
    F7                   下一个结果
    2*F7               上一个结果
    F8                   编译和运行单个程序
    2*F8               调试单个程序
    F9                   编译
    Ctrl+F9            执行
    Shift+F9          设置命令行参数               
    F10                 在该行后边添加注释
    Shift+F10        注释掉该行
    2*(Shift+F10) 去掉改行的注释
    F11                 格式化代码
    F12                 建立目录及子目录下的索引Tags
    Shift+t            新建标签
    2*(Shift+t)     标签间跳转
    Shift+o           建立新行但是不插入
    Ctrl+a             全选
    2*(Shift+q)     快速不保存
    Ctrl+h             替换

    Tags相关:Ctrl+\+字母

        * s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
        * g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
        * d: 查找本函数调用的函数
        * c: 查找调用本函数的函数
        * t: 查找指定的字符串
        * e: 查找egrep模式,相当于egrep功能,但查找速度快多了
        * f: 查找并打开文件,类似vim的find功能
        * i: 查找包含本文件的文件

    TagList操作:

              跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
    o             在一个新打开的窗口中显示光标下tag
           显示光标下tag的原型定义
    u             更新taglist窗口中的tag
    s             更改排序方式,在按名字排序和按出现顺序排序间切换
    x             taglist窗口放大和缩小,方便查看较长的tag
    +             打开一个折叠,同zo
    -             将tag折叠起来,同zc
    *             打开所有的折叠,同zR
    =             将所有tag折叠起来,同zM
    [[            跳到前一个文件
    ]]            跳到后一个文件
    q             关闭taglist窗口
              显示帮助
    在浏览代码时Taglist常用操作为:
    gd 转到当前光标所指的局部变量的定义
    * 转到当前光标所指的单词下一次出现的地方
    # 转到当前光标所指的单词上一次出现的地方
    ctrl+] 转到函数定义的地方
    ctrl+o 回退到函数调用的地方

    Winmanager文件操作技巧:


     显示帮助 

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


    C-Support常见补全结构与快捷键

    -- 常用结构 ---------------------------------------------------------
    \sd do { } while
    \sf for
    \sfo for { }
    \sif if { }
    \sife if { } else { }
    \swh while { } (n,v,i)
    \ss switch (n,v,i)
    \sc case (n,i)
    \s{ { } (n,v,i)

    -- 预处理命令 -------------------------------------------------------
    \p< #include <> (n,i)
    \p" #include "" (n,i)
    \pd #define (n,i)
    \pu #undef (n,i)
    \pie #if #else #endif (n,v,i)
    \pid #ifdef #else #endif (n,v,i)
    \pin #ifndef #else #endif (n,v,i)
    \pind #ifndef #def #endif (n,v,i)
    \pi0 #if 0 #endif (n,v,i)
    \pr0 remove #if 0 #endif (n,i)
    \pe #error (n,i)
    \pl #line (n,i)
    \pp #pragma (n,i)

    -- 常用短语 -------------------------------------------------------------
    \im main() (n,v,i)
    \i0 for( x=0; x
    \in for( x=n-1; x>=0; x-=1 ) (n,v,i)
    \ie enum + typedef (n,i)
    \is struct + typedef (n,i)
    \iu union + typedef (n,i)
    \ip printf() (n,i)
    \isc scanf() (n,i)
    \ica p=calloc() (n,i)
    \ima p=malloc() (n,i)
    \isi sizeof() (n,v,i)
    \ias assert() (n,v)

    -- C++ ----------------------------------------------------------------
    \+c class (n,i)
    \+cn class (using new) (n,i)
    \+ci class implementation (n,i)
    \+cni class (using new) implementation (n,i)
    \+mi method implementation (n,i)
    \+ai accessor implementation (n,i)

    \+tc template class (n,i)
    \+tcn template class (using new) (n,i)
    \+tci template class implementation (n,i)
    \+tcni template class (using new) impl. (n,i)
    \+tmi template method implementation (n,i)
    \+tai template accessor implementation (n,i)

    \+tf template function (n,i)
    \+ec error class (n,i)
    \+tr try ... catch (n,v,i)
    \+ca catch (n,v,i)
    \+c. catch(...) (n,v,i)


    Code Complete常用结构:Ctrl +b补全

    xt 插入当前时间

            C/C++语言:

    cc /*  */
    de #define
    in #include    ""
    is #include    <>
    ff #ifndef 
    ife  if...els

           BASH:

    sif               if
    sife             if...els
    scase          case
    swhile         while
    suntil          until
    sfor             for
    sselect        select
    参考文献:

    http://www.vimer.cn/
    http://qixinglu.com/archives/vim_key_mapping
    http://easwy.com/blog/archives/advanced-vim-skills-cscope/
    http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx

    附上述vimrc配置文件:

    "基本配置
    set wildmenu
    "增强模式中的命令行自动完成操作
    set foldmethod=manual
    "设定折叠方式为手动
    set helplang=cn
    "设置帮助的语言为中文
    set cin   
    "实现C程序的缩进
    set sw=4  
    "设计(自动) 缩进使用4个空格
    set sta   
    "插入<tab>时使用'shiftwidth'
    set backspace=2
    "指明在插入模式下可以使用<BS>删除光标前面的字符
    syntax enable
    "设置高亮关键字显示
    set nocompatible
    "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
    set number
    "显示行号
    filetype on
    "检测文件的类型
    map <fe> :q
    set history=1000
    ""记录历史的行数
    set background=dark
    "背景使用黑色
    syntax on
    "语法高亮度显示
    set autoindent
    set smartindent
    "上面两行在进行编写代码时,在格式对起上很有用;
    "第一行,vim使用自动对起,也就是把当前行的对起格式应用到下一行;
    "第二行,依据上面的对起格式,智能的选择对起方式,对于类似C语言编写上很有用
    "第一行设置tab键为4个空格,第二行设置当行之间交错时使用4个空格
    set tabstop=4
    set shiftwidth=4
    set showmatch
    "设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
    set ruler
    "在编辑过程中,在右下角显示光标位置的状态行
    set incsearch
    "查询时非常方便,如要查找book单词,当输入到/b时,会自动找到第一
    "个b开头的单词,当输入到/bo时,会自动找到第一个bo开头的单词,依
    "次类推,进行查找时,使用此设置会快速找到答案,当你找要匹配的单词
    "时,别忘记回车。
     set enc=chinese
    "设置编码为中文
    set winaltkeys=no
    "Alt组合键不映射到菜单上

    set helplang=cn

    filetype plugin on

    "禁止自动改变当前Vim窗口的大小
    let Tlist_Inc_Winwidth=0
    "把方法列表放在屏幕的右侧
    let Tlist_Use_Right_Window=1
    "让当前不被编辑的文件的方法列表自动折叠起来, 这样可以节约一些屏幕空间
    let Tlist_File_Fold_Auto_Close=1
    "映射F4为功能键调出tages浏览器
    "映射F3为功能键调出winmanager的文件浏览器
    "let g:winManagerWindowLayout='FileExplorer|TagList' "你要是喜欢这种布局可以注释掉这一行
    map <F4> :TlistToggle<cr>
    map <F3> :WMToggle<cr>
    "将当前的工程的tags导入
    set tags=./tags
    "将系统已经生成的tags导入
    set tags+=~/.vim/systags

        map <F12> :call Do_CsTag()<CR>//以后按F12就可以对一个工程进行tags索引建立并且引入了
        nmap <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>  
        nmap <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>  
        nmap <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>  
        nmap <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>  
        nmap <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR>  
        nmap <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR>  
        nmap <C-\>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
        nmap <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>
        function Do_CsTag()
            if(executable('cscope') && has("cscope") )
                if(g:iswindows!=1)
                    silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' -o -name '*.cxx' -o -name '*.hxx'> cscope.files"
                else
                    silent! execute "!dir /b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
                endif
                silent! execute "!cscope -bq"
                if filereadable("cscope.out")
                    execute "cs add cscope.out"
                endif
            endif
        endf

    "定义源代码格式化
    map <F11>:call FormartSrc()<CR>
    "定义FormartSrc()
    func FormartSrc()
    exec "w"
    "C程序,Perl程序,Python程序
    if &filetype == 'c'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'cpp'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'perl'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'py'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    "Java程序
    elseif &filetype == 'java'
    exec "!astyle --style=java --suffix=none %"
    exec "e! %"
    elseif &filetype == 'jsp'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'xml'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'html'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    elseif &filetype == 'htm'
    exec "!astyle --style=gnu --suffix=none %"
    exec "e! %"
    endif
    endfunc
    "结束定义FormartSrc

    "设置tab的快捷键
    "Shift+t为新建一个标签,按两次Shirt+t为跳转标签
    map <S-t> :tabnew .<CR>
    map <S-t><S-t> <ESC>:tabnext<CR>

    "设置建立新行但是不插入
    map <S-o> o<ESC><CR>
    "设置全选快捷键
    map <C-a> ggVG
    "设置快速不保存退出快捷键
    map <S-q><S-q> :q!<CR>:q!<CR>:q!<CR>

    "替换
    map <C-H> :L1,L2s/src/tar/g
    imap <C-H> <Esc><C-H>

    "设置快速注释键
    "F10是在该行后边添加注释,Shift+F10为注释掉该行,两次Shift+F10是去掉改行的注释,然后将光标置于下一行
    map <S-F10> <ESC>I//<ESC><CR>
    map! <S-F10> <ESC>I//<ESC><CR>
    map <S-F10><S-F10> 02x<ESC><CR>
    map! <S-F10><S-F10> <ESC>02x<ESC><CR>
    map <F10> <ESC>$a//
    map! <F10> <ESC>$a//

    "设置编译快捷键
    "F5为make,两次F5为make clean
    "F6为quickfix,查看详细信息, 两次F6关闭详细信息
    "F7为下一个结果,两次F7为上一个结果
    "F8为编译和运行单个程序、两次F8为调试
    map <F5> :make<CR>
    map <F5><F5> :make clean<CR>
    map <F6> :cw<CR>
    map <F6><F6> :ccl<CR>
    map <F7> :cn<CR>
    map <F7><F7> :cp<CR>
    map <F8> :call CompileRun()<CR>
    map <F8><F8> :call Debug()<CR>


    "定义CompileRun函数,用来对不用外接库的小程序进行编译和运行,自己可以根据文件名扩展或实际情况修改参数
    func CompileRun()
    exec "w"
    "C程序
    if &filetype == 'c'
    exec "!gcc % -g -o %<"
    exec "!.\/%<"
    endif
    endfunc
    "结束定义CompileRun

    "定义Debug函数,用来调试小程序
    func Debug()
    exec "w"
    "C程序
    if &filetype == 'c'
    exec "!rm %<"
    exec "!gcc % -g -o %<"
    exec "!gdb %<"
    elseif &filetype == 'cpp'
    exec "!rm %<"
    exec "!g++ % -g -o %<"
    exec "!gdb %<"
    "Java程序
    exec "!rm %<.class"
    elseif &filetype == 'java'
    exec "!javac %"
    exec "!jdb %<"
    endif
    endfunc
    "定义dubug结束

    autocmd BufNewFile *.cc,*.sh,*.java exec ":call SetTitle()"
    "新建.cc,.java,.sh,
    "定义函数SetTitle,自动插入文件头
    func SetTitle()
    "如果文件类型为.sh文件
    if &filetype == 'sh'
    call setline(1, "\#!/bin/bash")
    call append(line("."), "\#########################################################################")
    call append(line(".")+1, "\# Author: gnuhpc(http://blog.csdn.net/gnuhpc)")
    call append(line(".")+2, "\# Created Time: ".strftime("%c"))
    call append(line(".")+3, "\# File Name: ".expand("%"))
    call append(line(".")+4, "\# Description: ")
    call append(line(".")+5, "\#########################################################################")
    call append(line(".")+6, "")
    else
    call setline(1, "/*************************************************************************")
    call append(line("."), " Author: gnuhpc(http://blog.csdn.net/gnuhpc)")
    call append(line(".")+1, " Created Time: ".strftime("%c"))
    call append(line(".")+2, " File Name: ".expand("%"))
    call append(line(".")+3, " Description: ")
    call append(line(".")+4, " ************************************************************************/")
    call append(line(".")+5, "")
    endif
    endfunc

    "自动将shell脚本设置为可执行权限
    au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent !chmod a+x <afile> | endif | endif

    "保存上次打开的位置

    if has("autocmd")

       autocmd BufRead *.txt set tw=78

       autocmd BufReadPost *

          \ if line("'\"") > 0 && line ("'\"") <= line("$") |

          \   exe "normal g'\"" |

          \ endif

    endif

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gnuhpc/archive/2010/01/29/5268965.aspx

  • 相关阅读:
    px, pt, rpx, rem,
    tomcat报错LifecycleException的解决方案
    servlet系列
    tomcat startup.bat双击闪退解决方案。
    代码页
    editplus工具配置
    正则表达式常见字符集
    单片机TM4C123学习(六):看门狗
    stata学习笔记(七):回归分析和稳健性检验
    单片机TM4C123学习(五):UART的使用
  • 原文地址:https://www.cnblogs.com/adylee/p/1661461.html
Copyright © 2011-2022 走看看