vim的配置文件为.vimrc 文件.
存放在~/.vimrc为用户配置.
存放在/etc/.vimrc为全局配置.
" 开启文件类型插件
filetype plugin on
" return OS type, eg: windows, or linux, mac, etc...
function! MySys()
if has("win16") || has("win32") || has("win64") || has("win95")
return "windows"
elseif has("unix")
return "linux"
endif
endfunction
" 语言环境
set encoding=utf-8
langua message zh_CN.UTF-8
" 设置字符编码列表
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr
"set guifontwide=新宋体:h14 " 设置中文的字体
" 设置英文的字体 :b加粗 :i斜体
set guifont=Bitstream_Vera_Sans_Mono:h14:cANSI:b
" 窗口切换重映射
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
" 将工作目录切换到当前文件.
nnoremap cwd :cd %:p:h<CR>
" 恢复文件关闭之前光标位置
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
" 复制/粘贴映射
vnoremap "y :w! /tmp/madao.vim<CR><CR>
vnoremap "p :r /tmp/madao.vim<CR><CR>
nnoremap "p :r /tmp/madao.vim<CR><CR>
" 杂项设置
" ====================================================================================syntax on " 自动语法高亮
syntax enable " 语法高亮
" 自动补全Ctrl+p时的一些选项:多于一项时显示菜单,最长选择,显示当前选择的额外信息
if v:version >= 700
set completeopt=menu,longest,preview
endif
" set expandtab " 将tab键转换为空格
set formatoptions=tcqro " 使得注释换行时自动加上前导的空格和星号
set history=50 " 设置冒号命令和搜索命令历史列表长度为50
set hlsearch " 搜索时高亮显示被找到的文件
" set ignorecase smartcase " 搜索时忽略大小写,但有一个或以上大写字母仍保持对大小写敏感
" set incsearch " 输入搜索内容时就显示搜索结果
" set nohlsearch " 搜索时不高亮显示被找到的文本
set mouse=a " 设定在任何模式下鼠标都可用
" set nobackup " 覆盖文件时不备份
set nocompatible " 设定gvim运行在增强模式下(不兼容vi)
" set noignorecase " 默认区分大小写
" set nolinebreak " 在单词中间断行
" set scrolloff=5 " 设定光标离窗口上下边界5行时窗口自动滚动
" set showcmd " 在状态栏显示目录所执行的指定,未完成的指令片段也会显示出来
" set wrap " 自动换行显示
set tabstop=4 " TAB键所表示的空格数(这个值只能管tab,不管缩进)
set shiftwidth=4 " 缩进所表示的空格数(不同于TAB,是利用>>缩进的大小,自动缩进也看这个值)
" set softtabstop=4 " 使得按退格键时可以一次删除4个空格
set autoindent " 自动缩进
set ruler " 标尺信息,显示光标在哪
" set cindent " C语言缩进风格
set number " 显示行号( set nu )
set backspace=indent,eol,start " 不设定的话在插入模式里无法使用退格键 delete和回车符等
" 突出显示当前行
:set cursorline
" 自动切换目录为当前文件所在的目录
" set autochdir
"设置命令行和状态栏
set cmdheight=1 " 设定命令行的行数为1
set laststatus=2 " 显示状态栏(默认值为1,无法显示状态栏)
" windows: set statusline=%F%m%r,%Y,%{&fileformat}\\\ASCII=\%b,HEX=\%B\\\ %l,%c%V\ %p%%\\\[\%L\ lines\ in\ all\]
set statusline=%F%m%r\ ASCII=\%b,HEX=\%B,%l,%c%V\ %L-%p%%
"设置在状态行显示的信息如下:
" %F 当前文件名
" %m 当前文件修改状态
" %r 当前文件是否只读
" %Y 当前文件类型
" %{&fileformat} 当前文件编码
" %b 当前光标处字符的ASCII码值
" %B 当前光标处字符的十六进制值
" %l 当前光标行号
" %c 当前光标列号
" %V 当前光标虚拟列号(根据字符所占字节数计算)
" %p 当前行占总行数的百分比
" %% 百分号
" %L 当前文件总行数
" ====================================================================================
" 配色方案
" ====================================================================================" colorscheme koehler " 设置配色方案
" colorscheme evening
" 注释颜色
hi Comment guifg=#999999
" 常量颜色
hi Constant guifg=#CD00CD
"#E00CE0
" hi Identifier guifg=#0000CD
" while for等颜色
hi Statement guifg=#BF2624
" 关键词类型颜色
hi Type guifg=#00CD00
" guibg=#39CB39
" 转义后字符颜色
hi Special guifg=#FB0C4B
" include宏等的颜色
hi PreProc guifg=#0000CD
" guibg=#0000FF
" 搜索匹配的颜色
hi Search guifg=#FFFFFF guibg=#BF2624
" guibg为背景颜色,guifg为普通字体颜色
hi Normal guifg=#000000 guibg=#F8F8DB
" 行号的颜色
hi LineNr guifg=#BD871D
" 光标的颜色
hi Cursor guibg=#000000
" 状态栏的颜色
" hi StatusLine guifg=#00FF00
" hi StatusLineNC guifg=#33FF33
" ====================================================================================" for bufexplorer
" ====================================================================================" let g:bufExplorerDefaultHelp=0 " Do not show default help
" let g:bufExplorerShowRelativePath=1 " Show relative paths
" let g:bufExplorerSortBy='mru' " Sort by most recently used
" let g:bufExplorerSplitRight=1 " Split right
" let g:bufExploreSplitVertical=1 " Split vertically
" let g:bufExploreSplitVerticalSize=30 " Split Width
" let g:bufExplorerUseCurrentWindow=1 " Open in new window
" ====================================================================================" for nerd_tree
" ====================================================================================let NERDChristmasTree=1 " 让Tree把自己给装饰得多姿多彩漂亮点
" let NERDTreeAutoCenter=1 " 控制光标移动超过一定距离时,是否自动将焦点y调整到屏中心
" let NERDTreeAutoCenterThreshold=1 " 与上面配合使用
" let NERDTreeCaseSensitiveSort=1 " 排序时是否大小写敏感
" let NERDTreeHighlightCursorline=1 " 是否高亮显示光标所在行
let NERDTreeBookmarksFile="~/.vim/NerdBookmarks.txt" " 指定书签文件
let NERDTreeMouseMode=2 " 指定鼠标模式(1.双击打开;2.单目录双文件;3.单击打开)
let NERDTreeQuitOnOpen=1 " 打开文件后是否关闭NerdTree窗口
let NERDTreeShowBookmarks=1 " 是否默认显示书签列表
let NERDTreeShowFiles=1 " 是否默认显示文件
let NERDTreeShowHidden=1 " 是否默认显示隐藏文件
" let NERDTreeShowLineNumbers=1 " 是否默认显示行号
" let NERDTreeSortOrder= " 排序规则,这个就麻烦了,可以用正则表达式
" let NERDTreeStatusline= " 窗口状态栏
let NERDTreeWinPos='right' " 窗口位置(’left’ or ‘right’)
let NERDTreeWinSize=50 " 窗口宽
" 映射F7打开关闭NERDTree窗口
" winnr() 获取当前窗口窗口ID
" winbufnr(winnr()) 获取当前窗口的缓冲区ID
" bufname(winbufnr(winnr())) 获取当前窗口缓冲区的名字
" strpart(bufname(winbufnr(winnr())), 10) 截取从缓冲区名字第10字符开始到结束
map <expr> <F7> bufloaded("NERD_tree_".strpart(bufname(winbufnr(winnr())),10))?"q":":NERDTree\<cr>"
" 设置nt调出窗口
nnoremap nt :NERDTreeToggle<CR>
let g:NERDTree_title="[NERD Tree]"
" ====================================================================================""""""""""""""""""""""""""""
" MRU
""""""""""""""""""""""""""""
" ===================================================================================="let MRU_File='/root/.vim/config/_vim_mru_files' " 把记录保存在哪
"let MRU_Max_Entries=10 " 最多保存多少条记录
"let MRU_Window_Height=8 " 设置MRU窗口高度
"let MRU_Use_Current_Window=0 " 设置是否让MRU窗口独点一页
"映射F2打开和关闭MRU窗口,bufloaded是判断缓冲是否加载
map <expr> <F2> bufloaded("__MRU_Files__")?"q":":MRU\<cr>"
" ====================================================================================""""""""""""""""""""""""""""
"SearchComplete
""""""""""""""""""""""""""""
" SearchComplete : Tab completion of words inside of a search ('/')
""""""""""""""""""""""""""""
" autocomplpop
""""""""""""""""""""""""""""
" 自动补全, 借助L9库(vim 函数库)
""""""""""""""""""""""""""""
"Omincppcomplete
""""""""""""""""""""""""""""
" 使用这个插件时, 需要用
" ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
" 这样的命令来生成tags文件.
" 其中
" --c++-kinds=+p : 为C++文件增加函数原型的标签
" --fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
" --extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteDot = 1 " 输入 . 后自动补全
let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std"]
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_DisplayMode=1
" Pmenu所有项 PmenuSel选中项 guibg guifg 背景色 前景色
highlight Pmenu guibg=darkgrey guifg=black
highlight PmenuSel guibg=lightgrey guifg=black
" 自动关闭补全窗口
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest
""""""""""""""""""""""""""""
"A
""""""""""""""""""""""""""""
nnoremap <silent> <F12> :AV<CR>
""""""""""""""""""""""""""""
"echofun
""""""""""""""""""""""""""""
" 显示函数原型.
" ctags --fields=+lS -R .
let g:EchoFuncKeyPrev = '<Esc>='
let g:EchoFuncKeyNext = '<Esc>-'
" for grep.vim
" =================================================================================================
nnoremap <silent><F3> :Rgrep<CR>
" =================================================================================================
" for TagList
" =================================================================================================
" 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就跳转
" let Tlist_Auto_Open=1 " 启动VIM自动打开taglist
" let Tlist_Close_On_Select=1 " 选择tag后自动关闭taglist
" let Tlist_File_Fold_Auto_Close=1 " 多文件时只显示当前文件的tag,其它的tag折叠
" let Tlist_WinHeight=200 " taglist窗口高度
" let Tlist_WinWidth=20 " taglist窗口宽度
" let Tlist_Use_Horiz_Window=1 " 设置taglist窗口横向显示
" 设置tl调出taglist
nnoremap tl :Tlist<CR>
" =================================================================================================
" 映射,tg执行ctags命令
nmap <silent> ,tg :!ctags -R --c++-kinds=+p --fields=+iaS --fields=+lS --extra=+q .<cr><cr>
vmap <silent> ,tg :!ctags -R --c++-kinds=+p --fields=+iaS --fields=+lS --extra=+q .<cr><cr>
" tags file.
:set tags+=/usr/include/tags
" :set tags=/smbfs/mid_kernel/tags
" :set tags=/smbfs/projs/android-2.2/debug/tags
" :set tags=/smbfs/projs/android-2.3/debug/tags
" :set tags=/smbfs/projs/amlogic/debug/tags
" cscope setting.
" ====================================================================================:set cscopequickfix=s-,c-,d-,i-,t-,e-
" 0 / s 查找本符号(symbols)
map <C-\>s :cs find s <C-R>=expand("<cword>")<CR><CR>
" 1 / g 查找本定义
map <C-\>g :cs find g <C-R>=expand("<cword>")<CR><CR>
" 2 / d 查找本函数调用的函数
map <C-\>d :cs find d <C-R>=expand("<cword>")<CR><CR>
" 3 / c 查找调用本函数的函数(call)
map <C-\>c :cs find c <C-R>=expand("<cword>")<CR><CR>
" 4 / t 查找本字符串(text)
map <C-\>t :cs find t <C-R>=expand("<cword>")<CR><CR>
" 6 / e 查找egrep模式
map <C-\>e :cs find e <C-R>=expand("<cword>")<CR><CR>
" 7 / f 查找本文件
map <C-\>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
" 8 / i 查找包含本文件的文件(include)
map <C-\>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
" ====================================================================================" :cs add /usr/include/cscope.out /root
" :cs add /smbfs/mid_kernel/cscope.out /smbfs/mid_kernel
" :cs add /smbfs/projs/android-2.2/debug/cscope.out /smbfs/projs/android-2.2/debug
" :cs add /smbfs/projs/android-2.3/debug/cscope.out /smbfs/projs/android-2.3/debug
" :cs add /smbfs/projs/amlogic/debug/cscope.out /smbfs/projs/amlogic/debug
" 打开新.c文件, 在普通模式下敲,ma 插入最基本的C语言代码.
nnoremap ,ma i#include <stdio.h><CR><CR>int main(void)<CR>{<CR><CR><CR>return 0;<ESC>v=o}<ESC>v=kO
" autocmd 示例. 请勿使用注释内容.
" 打开.c类型文件时执行后面的脚本内容
" autocmd FileType c source ~/.vim/syntax/c.vim
" 新建.c类型文件时将指定文件内容加入新建文件中
" autocmd BufNewFile *.c 0r ~/.vim/files/skeletons/c.skel
" 新建.c类型文件时执行后面的指定命令
" autocmd BufNewFile *.c normal ctags -R --c++-kinds=+p --fields=+iaS
" --fields=+lS --extra=+q .
" 获取当前文件名
function GetFileName()
return bufname(winbufnr(winnr())) "获取当前窗口缓冲区的名字
endfunction
" 获取当前时间,精确到分
function GetDateTime()
return strftime("%Y-%m-%d %H:%M")
endfunction
" 添加文件说明信息
nnoremap <silent> <C-S-2> ggi/*<CR>
\*******************************************************************************
\<CR>*<CR>* FileName : <C-R>=GetFileName()<ESC>
\<CR>*<CR>* Author :
\<CR>*<CR>* Created : <C-R>=GetDateTime()<ESC>
\<CR>*<CR>* Description :
\<CR>*<CR>
\*******************************************************************************
\<CR>*/<CR><CR>
inoremap <silent> <C-S-1> <ESC>ggi/*<CR>
\*******************************************************************************
\<CR>*<CR>* FileName : <C-R>=GetFileName()<ESC>
\<CR>*<CR>* Author :
\<CR>*<CR>* Created : <C-R>=GetDateTime()<ESC>
\<CR>*<CR>* Description :
\<CR>*<CR>
\*******************************************************************************
\<CR>*/<CR><CR>
" 添加函数说明信息
nnoremap <silent> <F4> i<CR>/*<CR>
\*******************************************************************************
\<CR>*<CR>* Function :
\<CR>*<CR>* Input :
\<CR>*<CR>* Output :
\<CR>*<CR>* Return :
\<CR>*<CR>* Description :
\<CR>*<CR>* Author : <C-R>=GetDateTime()<ESC>
\<CR>*<CR>
\*******************************************************************************
\<CR>*/<CR><CR>
inoremap <silent> <F4> <CR>/*<CR>
\*******************************************************************************
\<CR>*<CR>* Function :
\<CR>*<CR>* Input :
\<CR>*<CR>* Output :
\<CR>*<CR>* Return :
\<CR>*<CR>* Description :
\<CR>*<CR>* Author : <C-R>=GetDateTime()<ESC>
\<CR>*<CR>
\*******************************************************************************
\<CR>*/<CR><CR>
" 添加自定义代码块注释,以区别是自己添加的代码
nnoremap <silent> <C-F5> O
\/* madao Start <C-R>=GetDateTime()<ESC> */<ESC>o
\/* madao End <C-R>=GetDateTime()<ESC> */<ESC>O
inoremap <silent> <C-F5> <ESC>O
\/* madao Start <C-R>=GetDateTime()<ESC> */<ESC>o
\/* madao End <C-R>=GetDateTime()<ESC> */<ESC>O
vnoremap <silent> <F5> dO
\#if 0 // madao Comment Start <C-R>=GetDateTime()<ESC><ESC>o
\#endif // madao Comment End <C-R>=GetDateTime()<ESC><ESC>O<CR><ESC>p
nnoremap <silent> <F5> O
\#if 0 // madao Comment Start <C-R>=GetDateTime()<ESC><ESC>o
\#endif // madao Comment End <C-R>=GetDateTime()<ESC><ESC>O
inoremap <silent> <F5> <ESC>O
\#if 0 // madao Comment Start <C-R>=GetDateTime()<ESC><ESC>o
\#endif // madao Comment End <C-R>=GetDateTime()<ESC><ESC>O
" 自动补全 (,",{,[
" nnoremap <silent> ( i()<ESC>i
" inoremap <silent> ( ()<ESC>i
" nnoremap <silent> { i{}<ESC>i
" inoremap <silent> { {}<ESC>i
" nnoremap <silent> [ i[]<ESC>i
" inoremap <silent> [ []<ESC>i
" 不知道干嘛的...
" set pastetoggle=<F>
" 相当于window下的复制粘贴
" vnoremap <silent> y "+y
" vnoremap <silent> p "+p
set diffexpr=MyDiff()
function MyDiff()
let opt = '-a --binary '
if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
let arg1 = v:fname_in
if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
let arg2 = v:fname_new
if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
let arg3 = v:fname_out
if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
let eq = ''
if $VIMRUNTIME =~ ' '
if &sh =~ '\<cmd'
let cmd = '""' . $VIMRUNTIME . '\diff"'
let eq = '"'
else
let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
endif
else
let cmd = $VIMRUNTIME . '\diff'
endif
silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction