找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 600|回复: 1

[【推荐】] 配置VIM下C/C++编程环境

[复制链接]
发表于 2010-2-4 09:19:17 | 显示全部楼层 |阅读模式
深奥的东西,权当体验了解一下吧。
http://blog.csdn.net/gnuhpc/archive/2010/01/29/5268965.aspx


本文环境: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 1,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 == &#39;c&#39;
exec \"!rm %<\"
exec \"!gcc % -g -o %<\"
exec \"!gdb %<\"
elseif &filetype == &#39;cpp&#39;
exec \"!rm %<\"
exec \"!g++ % -g -o %<\"
exec \"!gdb %<\"
\"Java程序
exec \"!rm %<.class\"
elseif &filetype == &#39;java&#39;
exec \"!javac %\"
exec \"!jdb %<\"
endif
endfunc
\"定义dubug结束

autocmd BufNewFile *.cc,*.sh,*.java exec \":call SetTitle()\"
\"新建.cc,.java,.sh,
\"定义函数SetTitle,自动插入文件头
func SetTitle()
\"如果文件类型为.sh文件
if &filetype == &#39;sh&#39;
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(\"&#39;\\\"\") > 0 && line (\"&#39;\\\"\") <= line(\"$\") |

   \\  exe \"normal g&#39;\\\"\" |

   \\ 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>时使用&#39;shiftwidth&#39;
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=&#39;FileExplorer|TagList&#39; \"你要是喜欢这种布局可以注释掉这一行
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(&#39;cscope&#39;) && has(\"cscope\") )
      if(g:iswindows!=1)
        silent! execute \"!find . -name &#39;*.h&#39; -o -name &#39;*.c&#39; -o -name &#39;*.cpp&#39; -o -name &#39;*.java&#39; -o -name &#39;*.cs&#39; -o -name &#39;*.cxx&#39; -o -name &#39;*.hxx&#39;> 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 == &#39;c&#39;
exec \"!astyle --style=gnu --suffix=none %\"
exec \"e! %\"
elseif &filetype == &#39;cpp&#39;
exec \"!astyle --style=gnu --suffix=none %\"
exec \"e! %\"
elseif &filetype == &#39;perl&#39;
exec \"!astyle --style=gnu --suffix=none %\"
exec \"e! %\"
elseif &filetype == &#39;py&#39;
exec \"!astyle --style=gnu --suffix=none %\"
exec \"e! %\"
\"Java程序
elseif &filetype == &#39;java&#39;
exec \"!astyle --style=java --suffix=none %\"
exec \"e! %\"
elseif &filetype == &#39;jsp&#39;
exec \"!astyle --style=gnu --suffix=none %\"
exec \"e! %\"
elseif &filetype == &#39;xml&#39;
exec \"!astyle --style=gnu --suffix=none %\"
exec \"e! %\"
elseif &filetype == &#39;html&#39;
exec \"!astyle --style=gnu --suffix=none %\"
exec \"e! %\"
elseif &filetype == &#39;htm&#39;
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> 1,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 == &#39;c&#39;
exec \"!gcc % -g -o %<\"
exec \"!.\\/%<\"
endif
endfunc
\"结束定义CompileRun

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

autocmd BufNewFile *.cc,*.sh,*.java exec \":call SetTitle()\"
\"新建.cc,.java,.sh,
\"定义函数SetTitle,自动插入文件头
func SetTitle()
\"如果文件类型为.sh文件
if &filetype == &#39;sh&#39;
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(\"&#39;\\\"\") > 0 && line (\"&#39;\\\"\") <= line(\"$\") |

   \\  exe \"normal g&#39;\\\"\" |

   \\ endif

endif
回复

使用道具 举报

发表于 2010-2-10 10:26:34 | 显示全部楼层
正解,谢谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-11-18 22:56 , Processed in 0.173588 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表