整合摘抄参考: 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窗口显示与否
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
可视化模式可以分为以下三种:
- 用
v
命令进入的字符可视化模式(Characterwise visual mode)。文本选择是以字符为单位的。 - 用
V
命令进入的行可视化模式(Linewise visual mode)。文本选择是以行为单位的。 - 用
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 nufiletype 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
" 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中添加
- "--ctags setting--
- " 按下F5重新生成tag文件,并更新taglist
- map <F5>:!ctags-R--c++-kinds=+p--fields=+iaS--extra=+q.<CR><CR>:TlistUpdate<CR>
- imap <F5><ESC>:!ctags-R--c++-kinds=+p--fields=+iaS--extra=+q.<CR><CR>:TlistUpdate<CR>
- set tags=tags
- set tags+=./tags"add current directory's generated tags file
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- |
安装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调出此窗口来显示定位错误
- "-- QuickFix setting --
- " 按下F6,执行make clean
- map <F6>:make clean<CR><CR><CR>
- " 按下F7,执行make编译程序,并打开quickfix窗口,显示编译信息
- map :make :copen
- " 按下F8,光标移到上一个错误所在的行
- map <F8>:cp<CR>
- " 按下F9,光标移到下一个错误所在的行
- map <F8> :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
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
十。折叠代码
set foldenable
set foldmethod=syntax
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