au BufNewFile,BufRead CMakeLists.txt set filetype=cmake "cmake高亮
目前暂时使用:
使用到pathogen,taglist,nerdtree,vim-airline,supertab,未用到tagbar,syntastic
execute pathogen#infect() "设置编码 set encoding=utf-8 set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936 set fileencodings=utf-8,ucs-bom,chinese "语言设置 set langmenu=zh_CN.UTF-8 "设置语法高亮 syntax enable syntax on "设置行数 set number "设置配色方案 "colorscheme torte "可以在buffer的任何地方使用鼠标 set mouse=a set selection=exclusive set selectmode=mouse,key "高亮显示匹配的括号 set showmatch "去掉vi一致性 set nocompatible "设置缩进 set tabstop=4 set softtabstop=4 set shiftwidth=4 set autoindent set cindent if &term=="xterm" set t_Co=8 set t_Sb=^[[4%dm set t_Sf=^[[3%dm endif "打开文件类型自动检测功能 filetype on "设置VIM记录的历史数 set history=400 "设置当文件被外部改变的时侯自动读入文件 if exists("&autoread") set autoread endif "设置ambiwidth set ambiwidth=double "设置文件类型 set ffs=unix,dos,mac " 总是显示状态行 set laststatus=2 " 命令行(在状态行下)的高度,默认为1,这里是2 set cmdheight=2 "设置增量搜索模式 set incsearch "设置静音模式 set noerrorbells set novisualbell set t_vb= "不要备份文件 set nobackup set nowb "粘贴复制的一些操作 vmap <C-c> "+y "选中状态下 Ctrl+c 复制 nmap <C-c> "+yy "选中状态下 Ctrl+c 复制 nmap <C-v> "+p "正常模式下粘贴 nmap <C-a> ggvG "正常模式下全选 vmap <C-x> dd<Esc> "正常模式下DEL nmap <leader>s :call SaveFile()<CR> imap <leader>s <ESC>:call SaveFile()<CR> vmap <leader>s <ESC>:call SaveFile()<CR> function! SaveFile() exec "w endfunction "设置自动补全 filetype plugin indent on "打开文件类型检测 set completeopt=longest,menu "关掉智能补全时的预览窗口 au BufNewFile,BufRead CMakeLists.txt set filetype=cmake "cmake高亮 "括号自动补全 :inoremap ( ()<ESC>i :inoremap ) <c-r>=ClosePair(')')<CR> :inoremap { {<CR>}<ESC>O :inoremap } <c-r>=ClosePair('}')<CR> :inoremap [ []<ESC>i :inoremap ] <c-r>=ClosePair(']')<CR> :inoremap " ""<ESC>i :inoremap ' ''<ESC>i function! ClosePair(char) if getline('.')[col('.') - 1] == a:char return "\<Right>" else return a:char endif endfunction "设置syntastic "set statusline+=%#warningmsg# "set statusline+=%{SyntasticStatuslineFlag()} "set statusline+=%* "let g:syntastic_always_populate_loc_list = 1 "let g:syntastic_auto_loc_list = 1 "let g:syntastic_check_on_open = 1 "let g:syntastic_check_on_wq = 0 "let g:syntastic_cpp_include_dirs = ['/usr/include/', '/usr/local/include/' ] "let g:syntastic_cpp_check_header = 1 "设置taglist let Tlist_Show_One_File=1 "显示多个文件的tags let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏 let Tlist_Exit_OnlyWindow=1 "在taglist是最后一个窗口时退出vim let Tlist_Use_SingleClick=1 "单击时跳转 let Tlist_Auto_Open = 1 let Tlist_GainFocus_On_ToggleOpen = 0 let Tlist_Use_Right_Window = 1 let Tlist_GainFocus_On_ToggleOpen=0 "打开taglist时获得输入焦点 let Tlist_Process_File_Always=1 "不管taglist窗口是否打开,始终解析文件中的tag let Tlist_Auto_Highlight_Tag = 1 "设置tagbar let g:tagbar_autoclose=1 let g:tagbar_autoshowtag =1 "设置suptab let g:SuperTabDefaultCompletionType = "<c-n>" let g:SuperTabContextDefaultCompletionType = "<c-n>" "设置neocomplcachex 可不用 " Use neocomplcache. let g:neocomplcache_enable_at_startup = 1 "设置ctags set tags=./tags; set tags+=/home/jason/program/tags; "设置nerdtree nmap <F2> :NERDTreeToggle<CR> function! NERDTree_Start() exec 'NERDTree' endfunction let loaded_nerd_tree=1 autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif "编译、连接、运行配置 (目前只配置了C、C++、Java语言) " " F9 一键保存、编译、连接存并运行 nmap <F9> :call Run()<CR> imap <F9> <ESC>:call Run()<CR> " Ctrl + F9 一键保存并编译 nmap <c-F9> :call Compile()<CR> imap <c-F9> <ESC>:call Compile()<CR> " Ctrl + F10 一键保存并连接 nmap <c-F10> :call Link()<CR> imap <c-F10> <ESC>:call Link()<CR> let s:LastShellReturn_C = 0 let s:LastShellReturn_L = 0 let s:ShowWarning = 1 let s:Obj_Extension = '.o' let s:Exe_Extension = '.exe' let s:Class_Extension = '.class' let s:Sou_Error = 0 let s:windows_CFlags = 'gcc\ -fexec-charset=gbk\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o' let s:linux_CFlags = 'gcc\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o' let s:windows_CPPFlags = 'g++\ -fexec-charset=gbk\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o' let s:linux_CPPFlags = 'g++\ -Wall\ -g\ -O0\ -c\ %\ -o\ %<.o' let s:JavaFlags = 'javac\ %' func! Compile() exe ":ccl" exe ":update" let s:Sou_Error = 0 let s:LastShellReturn_C = 0 let Sou = expand("%:p") let v:statusmsg = '' if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx" let Obj = expand("%:p:r").s:Obj_Extension let Obj_Name = expand("%:p:t:r").s:Obj_Extension if !filereadable(Obj) || (filereadable(Obj) && (getftime(Obj) < getftime(Sou))) redraw! if expand("%:e") == "c" if g:iswindows exe ":setlocal makeprg=".s:windows_CFlags else exe ":setlocal makeprg=".s:linux_CFlags endif echohl WarningMsg | echo " compiling..." silent make elseif expand("%:e") == "cpp" || expand("%:e") == "cxx" if g:iswindows exe ":setlocal makeprg=".s:windows_CPPFlags else exe ":setlocal makeprg=".s:linux_CPPFlags endif echohl WarningMsg | echo " compiling..." silent make endif redraw! if v:shell_error != 0 let s:LastShellReturn_C = v:shell_error endif if g:iswindows if s:LastShellReturn_C != 0 exe ":bo cope" echohl WarningMsg | echo " compilation failed" else if s:ShowWarning exe ":bo cw" endif echohl WarningMsg | echo " compilation successful" endif else if empty(v:statusmsg) echohl WarningMsg | echo " compilation successful" else exe ":bo cope" endif endif else echohl WarningMsg | echo ""Obj_Name"is up to date" endif elseif expand("%:e") == "java" let class = expand("%:p:r").s:Class_Extension let class_Name = expand("%:p:t:r").s:Class_Extension if !filereadable(class) || (filereadable(class) && (getftime(class) < getftime(Sou))) redraw! exe ":setlocal makeprg=".s:JavaFlags echohl WarningMsg | echo " compiling..." silent make redraw! if v:shell_error != 0 let s:LastShellReturn_C = v:shell_error endif if g:iswindows if s:LastShellReturn_C != 0 exe ":bo cope" echohl WarningMsg | echo " compilation failed" else if s:ShowWarning exe ":bo cw" endif echohl WarningMsg | echo " compilation successful" endif else if empty(v:statusmsg) echohl WarningMsg | echo " compilation successful" else exe ":bo cope" endif endif else echohl WarningMsg | echo ""class_Name"is up to date" endif else let s:Sou_Error = 1 echohl WarningMsg | echo " please choose the correct source file" endif exe ":setlocal makeprg=make" endfunc func! Link() call Compile() if s:Sou_Error || s:LastShellReturn_C != 0 return endif if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx" let s:LastShellReturn_L = 0 let Sou = expand("%:p") let Obj = expand("%:p:r").s:Obj_Extension if g:iswindows let Exe = expand("%:p:r").s:Exe_Extension let Exe_Name = expand("%:p:t:r").s:Exe_Extension else let Exe = expand("%:p:r") let Exe_Name = expand("%:p:t:r") endif let v:statusmsg = '' if filereadable(Obj) && (getftime(Obj) >= getftime(Sou)) redraw! if !executable(Exe) || (executable(Exe) && getftime(Exe) < getftime(Obj)) if expand("%:e") == "c" setlocal makeprg=gcc\ -o\ %<\ %<.o echohl WarningMsg | echo " linking..." silent make elseif expand("%:e") == "cpp" || expand("%:e") == "cxx" setlocal makeprg=g++\ -o\ %<\ %<.o echohl WarningMsg | echo " linking..." silent make endif redraw! if v:shell_error != 0 let s:LastShellReturn_L = v:shell_error endif if g:iswindows if s:LastShellReturn_L != 0 exe ":bo cope" echohl WarningMsg | echo " linking failed" else if s:ShowWarning exe ":bo cw" endif echohl WarningMsg | echo " linking successful" endif else if empty(v:statusmsg) echohl WarningMsg | echo " linking successful" else exe ":bo cope" endif endif else echohl WarningMsg | echo ""Exe_Name"is up to date" endif endif setlocal makeprg=make elseif expand("%:e") == "java" return endif endfunc func! Run() let s:ShowWarning = 0 call Link() let s:ShowWarning = 1 if s:Sou_Error || s:LastShellReturn_C != 0 || s:LastShellReturn_L != 0 return endif let Sou = expand("%:p") if expand("%:e") == "c" || expand("%:e") == "cpp" || expand("%:e") == "cxx" let Obj = expand("%:p:r").s:Obj_Extension if g:iswindows let Exe = expand("%:p:r").s:Exe_Extension else let Exe = expand("%:p:r") endif if executable(Exe) && getftime(Exe) >= getftime(Obj) && getftime(Obj) >= getftime(Sou) redraw! echohl WarningMsg | echo " running..." if g:iswindows exe ":!%<.exe" else if g:isGUI exe ":!gnome-terminal -x bash -c './%<; echo; echo 请按 Enter 键继续; read'" else exe ":!clear; ./%<" endif endif redraw! echohl WarningMsg | echo " running finish" endif elseif expand("%:e") == "java" let class = expand("%:p:r").s:Class_Extension if getftime(class) >= getftime(Sou) redraw! echohl WarningMsg | echo " running..." if g:iswindows exe ":!java %<" else if g:isGUI exe ":!gnome-terminal -x bash -c 'java %<; echo; echo 请按 Enter 键继续; read'" else exe ":!clear; java %<" endif endif redraw! echohl WarningMsg | echo " running finish" endif endif endfunc