vim配置(C/C++)

整合摘抄参考:  http://blog.csdn.net/wooin/article/details/1858917

            http://blog.csdn.net/fbfsber008/article/details/7044723

            http://blog.csdn.net/deutschester/article/details/5750989

            http://blog.chinaunix.net/uid-23089249-id-2855999.html


vim常用的一些命令, 放在这里供我备忘:

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

include 头文件:按下gf键便便可以进入到相应头文件,后退可以ctrl+o

自己设置的有:

f3 粘贴不缩近

f4 生成cscope数据库,并添加到vim

按下F5重新生成tag文件,cscope数据库,并更新taglist

f6 make clean

f7 make

f8 在quickfix 的上一个错误cp 跳转

f9 在quickfix的下一个错误cn 跳转

f12 .h与.c .cpp 文件切换

ctr+w +【s.g.c.t.e.i.f.d】cscope的快捷键

ctr+b 函数原型提示前一个

ctr+d 函数原型提示下一个

tg taglist窗口显示与否

wm winmanager窗口显示与否

qf quickFix窗口显示与否

折叠快捷键 za 打开或关闭某个折叠
                  zi  打开或关闭所有折叠

ctr+o 前跳,ctr+t回跳

----------------------------------------------------------------------------------------------------------------------------------

按ctrl+v 进入 Visual mode 可视模式,可以用键盘的上下左右更改选中区域

ctrl+w+w 在代码区域和taglist窗口区域跳转

文件间切换(一个窗口,但是打开了多个文件) Ctrl+6 :下一个文件

分屏,窗口文件调整http://www.2cto.com/os/201412/358384.html、http://www.2cto.com/os/201307/229329.html


可视化模式可以分为以下三种:

  1. v命令进入的字符可视化模式(Characterwise visual mode)。文本选择是以字符为单位的。
  2. V命令进入的行可视化模式(Linewise visual mode)。文本选择是以行为单位的。
  3. ctrl+V进入的块可视化模式(Blockwise visual mode)。可以选择一个矩形内的文本。

多行注释:

1. 进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来

2. 按大写字母I,再插入注释符,例如//

3. 按esc键就会全部注释了


取消多行注释:

1. 进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 // 需要选中2列

2. 按字母j,或者k选中注释符号

3. 按d键就可全部取消注释

在可视化模式下编辑

在可视化模式下,我们可以进行各种编辑操作。如d命令可以删除高亮显示的文本,而D命令则会删除一行,即使这一行中只有部分文本是高亮显示的。类似的,y命令将复制高亮显示的文本,而Y命令会复制整行。c命令可以将高亮显示的文本删除并进入编辑模式,而C命令会删除一行文本并进入编辑状态。

针对高亮显示的文本块,我们可以用命令~进行大小写转换。

用命令>增加缩进,或用命令<减少缩进。


一。.vimrc基本配置

vim ~/.vimrc

添加如下内容

set nocompatible

set nu
filetype on
set history=1000
set background=dark
syntax on
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set showmatch
set guioptions-=T
set vb t_vb=
set ruler
set nohls

set incsearch


下面的配置转自:http://blog.chinaunix.net/uid-23089249-id-2855999.html

  1. " This line should not be removed as it ensures that various options are
    " properly set to work with the Vim-related packages availablein Debian.
     debian.vim
    " Uncomment the next line to make Vim more Vi-compatible
    " NOTE: debian.vim sets'nocompatible'. Setting'compatible' changes numerous
    " options, so any other options should be set AFTER setting 'compatible'.
    set nocompatible
    " Vim5 and later versions support syntax highlighting. Uncommenting the
    " following enables syntax highlighting by default.
    if has("syntax")
      syntax on            " 语法高亮
    endif
    colorscheme ron        " elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下
    " detect file type
    filetype on
    filetype plugin on
    " If using a dark background within the editing area and syntax highlighting
    " turn on this option as well
    set background=dark
    " Uncomment the following to have Vim jump to the last position when
    " reopening a file
    if has("autocmd")
      au BufReadPost * if line("'\"") > 1 && line("'\"")<= line("$")| exe"normal! g'\"" | endif
      "have Vim load indentation rules and plugins accordingto the detected filetype
      filetype plugin indent on
    endif
    " The following are commented out as they cause vim to behave a lot
    " differently from regular Vi. They are highly recommended though.
    "set ignorecase        " 搜索模式里忽略大小写
    "set smartcase        " 如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。
    set autowrite        " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
    set autoindent        " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置
    "set smartindent        " 智能对齐方式
    set tabstop=4        " 设置制表符(tab键)的宽度
    set softtabstop=4     " 设置软制表符的宽度    
    set shiftwidth=4    " (自动) 缩进使用的4个空格
    set cindent            " 使用 C/C++ 语言的自动缩进方式
    set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s     "设置C/C++语言的具体缩进方式
    "set backspace=2    " 设置退格键可用
    set showmatch        " 设置匹配模式,显示匹配的括号
    set linebreak        " 整词换行
    set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
    "set hidden " Hide buffers when they are abandoned
    set mouse=a            " Enable mouse usage (all modes)    "使用鼠标定位、选中(在选中某些字符时,在vim中复制用按“y”,粘贴时按“p”;如果要复制到其他地方,要先按住shift 再用鼠标选中,松开shift这时候右健菜单中才有复制选项,不然复制选项时灰的,无法使用)
    set number            " Enable line number    "显示行号
    "set previewwindow    " 标识预览窗口
    set history=50        " set command history to 50    "历史记录50条
    "--状态行设置--
    set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
    set ruler            " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。
    "--命令行设置--
    set showcmd            " 命令行显示输入的命令
    set showmode        " 命令行显示vim当前模式
    "--find setting--
    set incsearch        " 输入字符串就显示匹配点
    set hlsearch      

     
--------------------------------------------------------------------------------------------------------------------

二。ctags安装,配置和使用

ctags用来生成符号,实现跳转

yum install ctags

在~/.vimrc中添加

  1. "--ctags setting--
  2. " 按下F5重新生成tag文件,并更新taglist
  3. map <F5>:!ctags-R--c++-kinds=+p--fields=+iaS--extra=+q.<CR><CR>:TlistUpdate<CR>
  4. imap <F5><ESC>:!ctags-R--c++-kinds=+p--fields=+iaS--extra=+q.<CR><CR>:TlistUpdate<CR>
  5. set tags=tags
  6. set tags+=./tags"add current directory's generated tags file
tag命令用法:
Ctrl+]  跳到当前光标下单词的标签
Ctrl+O  返回上一个标签
Ctrl+T  返回上一个标签
:tag TagName 跳到TagName标签
以上命令是在当前窗口显示标签,当前窗口的文件替代为包标签的文件,当前窗口光标跳到标签位置。如果不希望在当前窗口显示标签,可以使用以下命令:
:stag TagName 新窗口显示TagName标签,光标跳到标签处
Ctrl+W + ]  新窗口显示当前光标下单词的标签,光标跳到标签处
当一个标签有多个匹配项时(函数 (或类中的方法) 被多次定义),":tags" 命令会跳转到第一处。如果在当前文件中存在匹配,那它将会被首先使用。
可以用这些命令在各匹配的标签间移动:
:tfirst    到第一个匹配
:[count]tprevious 向前 [count] 个匹配
:[count]tnext  向后 [count] 个匹配
:tlast    到最后一个匹配
或者使用以下命令选择要跳转到哪一个
:tselect TagName
输入以上命令后,vim会为你展示一个选择列表。然后你可以输入要跳转到的匹配代号 (在第一列)。其它列的信息可以让你知道标签在何处被定义过。
以下命令将在预览窗口显示标签
:ptag TagName 预览窗口显示TagName标签,光标跳到标签处
Ctrl+W + }  预览窗口显示当前光标下单词的标签,光标跳到标签处
:pclose   关闭预览窗口
:pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用)
:psearch atoi 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。

三。taglist

taglist在符号在窗口里列出来,方便全局预览,跳转

下载taglist安装包解压后在里面的taglist.vim和taglist.txt分别放在在~/.vim/plugin和~/.vim/doc目录下

在vim中

:helptags ~/.vim/doc

:help taglist.txt

在~/.vimrc中添加

let Tlist_Ctags_Cmd = '/usr/bin/ctags'   "设定Linux系统中ctags程序的位置
let Tlist_Show_One_File=1    "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow=1  "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window = 1         "在右侧窗口中显示taglist窗口
"let Tlist_Use_SingleClick= 1    " 缺省情况下,在双击一个tag时,才会跳到该tag定义的位置
let Tlist_Auto_Open=1    "在启动VIM后,自动打开taglist窗口
let Tlist_Process_File_Always=1  "taglist始终解析文件中的tag,不管taglist窗口有没有打开
let Tlist_File_Fold_Auto_Close=1 "同时显示多个文件中的tag时,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来

nmap tl :TlistToggle<CR>         "按t l 开启或关闭taglist


在taglist窗口中,可以使用下面的快捷键


<CR>            跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
o                    在一个新打开的窗口中显示光标下tag
<Space>   (空格)显示光标下的tag的原型定义,在vim
u                    更新taglist窗口中的tag
s                    更改排序方式,在按名字排序和按出现顺序排序间切换
x                    taglist窗口放大和缩小,方便查看较长的tag
+                    打开一个折叠,同zo
-                    将tag折叠起来,同zc
*                    打开所有的折叠,同zR
=                   将所有tag折叠起来,同zM
[[                   跳到前一个文件
]]                   跳到后一个文件
q                  关闭taglist窗口
<F1>          显示帮助

四。资源目录winmanager

下载并在 ~/.vim 目录下解压winmanager.zip 

现在在你的~/.vimrc中增加下面两句

“let g:winManagerWindowLayout='FileExplorer|TagList'  “将taglist与wm上下分屏
nmap wm :WMToggle<cr>     ”直接按 w m 显示wm

五:安装Cscope

cscope比ctags更强大,可以符号跳转、可以在项目中查找引用

先在~/vimrc中增加一句:

:set cscopequickfix=s-,c-,d-,i-,t-,e-
这个是设定是否使用 quickfix 窗口来显示 cscope 结果

安装Cscope:
如果你的系统中有cscope命令(ctrl+d退出), 则可以跳过这一小段, 如果没有
在Cscope的主页: http://cscope.sourceforge.net 下载一个源码包, 解压后编译安装:
# ./configure
# make
# make install       // 需要root权限

编辑vimrc添加:

map <F4> :!find . -type f > cscope.files<CR><CR> :!cscope -Rbq<CR><CR> :cs add cscope.out<CR><CR>
imap <F4> <ESC> :!find . -type f > cscope.files<CR><CR> :!cscope -Rbq<CR><CR>

cscope的主要功能是通过同的子命令"find"来实现的
"cscope find"的用法:
cs find c|d|e|f|g|i|s|t name

0 或 s查找本 C 符号(可以跳过注释)
1 或 g查找本定义
2 或 d查找本函数调用的函数
3 或 c查找调用本函数的函数
4 或 t查找本字符串
6 或 e查找本 egrep 模式
7 或 f查找本文件
8 或 i查找包含本文件的文件

如果每次查找都要输入一长串命令的话还真是件讨人厌的事情, Cscope的帮助手册中推荐了一些快捷键的用法, 下面是其中一组, 也是我用的, 将下面的内容添加到~/.vimrc中, 并重启vim:
nmap <C-w>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-w>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-w>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-w>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-w>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-w>f :cs find f <C-R>=expand("<cword>")<CR><CR>
nmap <C-w>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
nmap <C-w>d :cs find d <C-R>=expand("<cword>")<CR><CR>

  使用时,将光标停留在要查找的对象上,按下<C-w>g,即先按“Ctrl+w”,然后很快再按“g”,将会查找该对象的定义。


很奇怪, 其中的这句:
nmap <C-w>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
在我的vim中无法工作, 但是我改成:
nmap <C-w>i :cs find i <C-R>=expand("<cfile>")<CR><CR>

cscope的其他功能你可以通过帮助手册自己慢慢学习

reset : 重新初始化所有连接。
用法  : cs reset

六。QuickFix 窗口

cscope就调用了这个窗口,这个窗口中列出了查询命令的查询结果, 用户可以从这个窗口中选择每个结果进行查看, 这个窗口叫"QuickFix"窗口, 以前也是一个vim的插件来的, 只不过现在成了vim的标准插件, 不用你在去安装了, QuickFix窗口的主要作用就是上面看到的那个功能: 输出一些供选择的结果, 可以被很多命令调用, 更详细的介绍和使用方法请用下面的命令打开QuickFix的手册来学习吧:
:help quickfix

如在vim中输入:make 编译出现错误,就可以通过:cw或在copen调出此窗口来显示定位错误

  1. "-- QuickFix setting --
  2. " 按下F6,执行make clean
  3. map <F6>:make clean<CR><CR><CR>
  4. " 按下F7,执行make编译程序,并打开quickfix窗口,显示编译信息
  5. map :make :copen
  6. " 按下F8,光标移到上一个错误所在的行
  7. map <F8>:cp<CR>
  8. " 按下F9,光标移到下一个错误所在的行
  9. map <F8> :cn<CR>
  10. " 以上的映射是使上面的快捷键在插入模式下也能用
  11. imap <F6><ESC>:make clean<CR><CR><CR>
  12. imap <F7><ESC>:make<CR><CR><CR>:copen<CR><CR>
  13. imap <F8><ESC>:cp<CR>
  14. imap <F9><ESC>:cn<CR>

"开或关闭quickFix
function! ToggleQuickFix()
  if exists("g:qwindow")
    cclose
    unlet g:qwindow
  else
    try
      copen
      let g:qwindow = 1
    catch
      echo "No Errors found!"
    endtry
  endif
endfunction

nmap qf :call ToggleQuickFix()<CR> "用qf来打开关闭quickfix




七。a.vim插件实现.h 与.c文件切换

下载a.vim放到~/.vim/plugin

安装好a.vim后有下面的几个命令可以用了:

:A在新Buffer中切换到c/h文件
:AS横向分割窗口并打开c/h文件
:AV纵向分割窗口并打开c/h文件
:AT新建一个标签页并打开c/h文件
其他还有一些命令, 你可以在它的网页上看看, 我都没用过, 其实也都是大同小异, 找到自己最顺手的就行了.

我在~/.vimrc中增加了一句:
nnoremap <silent> <F12> :A<CR>  "’F12快捷键

八。omnicppcomplete 插件(让vim支持代码自动补全)

unzip omnicppcomplete-0.41.zip   -d    ~/.vim,从而在~/.vim下面解压出after、autoload、doc三个文件夹。至此omnicppcomplete的安装已经完成。

在vim配置文件/home/user/.vimrc中加入如下的配置:

    "-- omnicppcomplete setting --
    " 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码
    "imap <F3><C-X><C-O>
    " 按下F2根据头文件内关键字补全
    "imap
    set completeopt=menu,menuone " 关掉智能补全时的预览窗口
    let OmniCpp_MayCompleteDot = 1 " autocomplete with .
    let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
    let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
    let OmniCpp_SelectFirstItem = 2 " select first item(but don't insert)
    let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
    let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototypein popupwindow
    let OmniCpp_GlobalScopeSearch=1" enable the global scope search
    let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
    "let OmniCpp_DefaultNamespaces=["std"]
    let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviationand remove the last column
    let OmniCpp_ShowAccess=1 


(前几行就是提供了C++中的./->/::等操作符的提示和自动完成)。

九、提示函数原型echofunc

echofunc可以在命令行中提示当前输入函数的原型。
echofunc下载地址:http://www.vim.org/scripts/script.php?script_id=1735
下载完成后,把echofunc.vim文件放到 ~/.vim/plugin文件夹中
当你在vim插入(insert)模式下紧接着函数名后输入一个"("的时候, 这个函数的声明就会自动显示在命令行中。如果这个函数有多个声明, 则可以通过按键"Alt+-"和"Alt+="向前和向后翻页(在我的linux上不起作用), 这个两个键可以通过设置g:EchoFuncKeyNext和g:EchoFuncKeyPrev参数来修改。这个插件需要tags文件的支持, 并且在创建tags文件的时候要加选项"--fields=+lS"(OmniCppComplete创建的tag文件也能用), 整个创建tags文件的命令如下:
$ ctags -R --fields=+lS
其他插件说明详见echofunc.vim

配置.vimrc
"echofunc Configuration
 let g:EchoFuncKeyPrev='<C-b>'
 let g:EchoFuncKeyNext='<C-d>'


常用命令:g:EchoFuncLangsDict 
   g:EchoFuncLangsUsed 
   g:EchoFuncMaxBalloonDeclarations 
   g:EchoFuncKeyNext 
   g:EchoFuncKeyPrev
 

如果你在编译vim时加上了"+balloon_eval"特性,那么当你把鼠标放在函数名上的时候会有一个tip窗口弹出, 该窗口中也会有函数的声明

十。折叠代码

vim ~/.vimrc
 添加
"折叠
 set foldenable
 set foldmethod=syntax

折叠快捷键 za 打开或关闭某个折叠
                  zi  打开或关闭所有折叠

我的vmrc完整配置
set nocompatible
set nu
filetype on
set history=1000
set background=dark
syntax on
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set showmatch
set guioptions-=T
set vb t_vb=
set ruler
set nohls
set incsearch
"粘贴,Paste toggle - when pasting something in, don't indent.
set pastetoggle=<F3>

" This line should not be removed as it ensures that various options are
" properly set to work with the Vim-related packages available in Debian.

" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
set nocompatible

" Vim5 and later versions support syntax highlighting. Uncommenting the
" following enables syntax highlighting by default.
if has("syntax")
  syntax on            " 语法高亮
endif
colorscheme ron        " elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下

" detect file type
filetype on
filetype plugin on

" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=dark

" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
  "have Vim load indentation rules and plugins according to the detected filetype
  filetype plugin indent on
endif

" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.

"set ignorecase        " 搜索模式里忽略大小写
"set smartcase        " 如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。
set autowrite        " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令转到别的文件时亦然。
set autoindent        " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置
"set smartindent        " 智能对齐方式
set tabstop=4        " 设置制表符(tab键)的宽度
set softtabstop=4     " 设置软制表符的宽度    
set shiftwidth=4    " (自动) 缩进使用的4个空格
set cindent            " 使用 C/C++ 语言的自动缩进方式
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s     "设置C/C++语言的具体缩进方式
"set backspace=2    " 设置退格键可用
set showmatch        " 设置匹配模式,显示匹配的括号
set linebreak        " 整词换行
set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
"set hidden " Hide buffers when they are abandoned
set mouse=a            " Enable mouse usage (all modes)    "使用鼠标
set number            " Enable line number    "显示行号
"set previewwindow    " 标识预览窗口

"--状态行设置--
set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
set ruler            " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。

"--命令行设置--
set showcmd            " 命令行显示输入的命令
set showmode        " 命令行显示vim当前模式

"--find setting--
set incsearch        " 输入字符串就显示匹配点
set hlsearch  

"--ctags setting--
"" 按下F5重新生成tag文件,cscope数据库,并更新taglist
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :!find . -type f > cscope.files<CR><CR> :cs reset<CR><CR> :!cscope -Rbq<CR><CR> :cs add cscope.out<CR><CR> :TlistUpdate<CR>
imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :!find . -type f > cscope.files<CR><CR> :!cscope -Rbq<CR><CR> :cs add cscope.out<CR><CR> :TlistUpdate<CR>
set tags=tags
set tags+=./tags "add current directory's generated tags file
set tags+=/usr/include/tags "add current directory's generated tags file

"taglist setting
let Tlist_Ctags_Cmd ='/usr/bin/ctags' "系统中ctags程序的位置
let Tlist_Show_One_File = 1      "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow = 1    "如果taglist窗口是最后一个窗口,则退出vim
"let Tlist_Use_Right_Window = 1   "在右侧窗口中显示taglist窗口
let Tlist_Use_SingleClick= 1     "缺省情况下,在双击一个tag时,才会跳到该tag定义的位置
let Tlist_Auto_Open=1            "在启动VIM后,自动打开taglist窗口
"let Tlist_Process_File_Always=1  "taglist始终解析文件中的tag,不管taglist窗口有没有打开
let Tlist_File_Fold_Auto_Close=1 "同时显示多个文件中的tag时,可使taglist只显示当前文件tag,其它文件的tag都被折叠起来
nmap tl :TlistToggle<CR>         "按t l 开启或关闭taglist

"winManger setting
"let g:winManagerWindowLayout='FileExplorer|TagList'   "与taglist上下分屏
let g:persistentBehaviour=0 " 如果所有编辑文件都关闭了,退出vim
nmap wm :WMToggle<cr>

"cscope setting
set cscopequickfix=s-,c-,d-,i-,t-,e-  "设定使用 quickfix 窗口来显示 cscope 结果
if has("cscope")
        set csprg=/usr/bin/cscope
        set csto=1
        set cst
        set nocsverb
        " add any database in current directory
        if filereadable("cscope.out")
            cs add cscope.out
        " else add database pointed to by environment
        elseif $CSCOPE_DB != ""
            cs add $CSCOPE_DB
        endif
        set csverb
endif
"按f4 生成cscope数据库,并添加到vim
map <F4> :!find . -type f > cscope.files<CR><CR> :cs reset<CR><CR> :!cscope -Rbq<CR><CR> :cs add cscope.out<CR><CR> 
imap <F4> <ESC> :!find . -type f > cscope.files<CR><CR> :cs reset<CR><CR> :!cscope -Rbq<CR><CR>
"cscope快捷键
nmap <C-w>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-w>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-w>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-w>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-w>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-w>f :cs find f <C-R>=expand("<cword>")<CR><CR>
"nmap <C-w>i :cs find i ^<C-R>=expand("<cword>")<CR>$<CR>
nmap <C-w>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
nmap <C-w>d :cs find d <C-R>=expand("<cword>")<CR><CR>

"a.vim插件 .c .h 切换
nnoremap <silent> <F12> :A<CR>  "F12快捷键.c .h 切换

"-- QuickFix setting 与 make 错误提示 --
" 按下F6,执行make clean
map <F6> :make clean<CR><CR><CR>
" 按下F7,执行make编译程序,并打开quickfix窗口,显示编译信息
map :make :copen
" 按下F8,光标移到上一个错误所在的行
map <F8> :cp<CR>
" 按下F9,光标移到下一个错误所在的行
map <F9> :cn<CR>
" 以上的映射是使上面的快捷键在插入模式下也能用
imap <F6> <ESC>:make clean<CR><CR><CR>
imap <F7> <ESC>:make<CR><CR><CR> :copen<CR><CR>
imap <F8> <ESC>:cp<CR>
imap <F9> <ESC>:cn<CR>

" 打开或关闭quickFix
function! ToggleQuickFix()
  if exists("g:qwindow")
    cclose
    unlet g:qwindow
  else
    try
      copen 
      let g:qwindow = 1
    catch 
      echo "No Errors found!"
    endtry
  endif
endfunction
"qf 打开或关闭quickfix
nmap qf :call ToggleQuickFix()<CR>

"-- omnicppcomplete setting --
" 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码
"imap <F3> <C-X><C-O>
" 按下F2根据头文件内关键字补全
"imap
set completeopt=menu,menuone " 关掉智能补全时的预览窗口
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
"let OmniCpp_DefaultNamespaces=["std"]
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1 

"echofunc Configuration
 let g:EchoFuncKeyPrev='<C-b>'
 let g:EchoFuncKeyNext='<C-d>'
 "折叠
 set foldenable
 set foldmethod=syntax


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值