vim的配置,配置文件目录/root/.vimrc,通过修改这个文件对vim的显示行号、设置文件编码、自动换行、代码高亮、显示字体、代码缩进等一系列的设置,如果没有这个文件可以进行创建。
vim /root/.vimrc
"====================基本设置 set Autochdir "自动设置当前目录为正在编辑的目录 set Hidden "自动隐藏没有保存的缓冲区,切换buffer时不给出保存当前buffer的提示 set Scrolloff=5 "在光标接近底端或顶端时,自动下滚或上滚 "Toggle Menu and Toolbar "隐藏菜单栏和工具栏 "set Guioptions-=m "set Guioptions-=T set Showtabline=2 "设置显是显示标签栏 set Autoread "设置当文件在外部被修改,自动更新该文件 set Mouse=a "设置在任何模式下鼠标都可用 set Nobackup "设置不生成备份文件 set smartindent "智能对齐 set autoindent "设置自动对齐 "set ai! "设置自动缩进 set helplang=cn "设置中文帮助 set history=500 "保留历史记录 set backspace=2 "设置退格键可用 set fileencoding=utf-8 set fileencodings=utf-8,gb18030,utf-16,big5 set bufhidden=hide set showmatch "设置匹配模式,相当于括号匹配 setlocal noswapfile"不要生成swap文件,当buffer被丢弃的时候隐藏它 " 自动换行 set wrap " 禁止折行 "set nowrap set linebreak "整词换行,与自动换行搭配使用 " 关闭兼容模式 set nocompatible " vim 自身命令行模式智能补全 set wildmenu " 开启行号显示 set number " 总是显示状态栏 set laststatus=2 set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%] "显示文件名:总行数,总的字符数 " 开启语法高亮功能 syntax enable " 允许用指定语法高亮配色方案替换默认方案 syntax on " 开启文件类型侦测 filetype on " 根据侦测到的不同类型加载对应的插件 filetype plugin on " 自适应不同语言的智能缩进 filetype indent on " 开启实时搜索功能 set incsearch " 搜索时大小写不敏感 set ignorecase " 高亮显示搜索结果 set hlsearch " 配色方案 "set background=dark "colorscheme solarized "colorscheme molokai "colorscheme phd " 高亮显示当前行/列 "set cursorline "set cursorcolumn " 显示光标当前位置 set ruler " 禁止光标闪烁 set gcr=a:block-blinkon0 " 禁止显示滚动条 set guioptions-=l set guioptions-=L set guioptions-=r set guioptions-=R " 禁止显示菜单和工具条 set guioptions-=m set guioptions-=T " 基于缩进或语法进行代码折叠 "set foldmethod=indent set foldmethod=syntax " 启动 vim 时关闭折叠代码 set nofoldenable " 将制表符扩展为空格 set expandtab " 设置编辑时制表符占用空格数 set tabstop=4 " 设置格式化时制表符占用空格数 set shiftwidth=4 " 让 vim 把连续数量的空格视为一个制表符 set softtabstop=4 " 设置 gvim 显示字体 "set guifont=YaHei\ Consolas\ Hybrid\ 11.5 set guifont=Courier_New:h11 "字体设置: 字体中间有空格的话,用下划线表示空格。:号后边表示选项 "====================vim 自身(非插件)快捷键 " 定义快捷键的前缀,即 <Leader> let mapleader=";" " 定义快捷键到行首和行尾 "nmap lb 0 nmap 1 $ " 设置快捷键将选中文本块复制至系统剪贴板 "vnoremap <Leader>y "+y " 设置快捷键将系统剪贴板内容粘贴至vim "nmap <Leader>p "+p " 定义快捷键关闭当前分割窗口 nmap <Leader>q :q<CR> " 定义快捷键保存当前窗口内容 nmap <Leader>w :w<CR> " 定义快捷键保存所有窗口内容并退出 vim nmap <Leader>waq :wa<CR>:q<CR> " 不做任何保存,直接退出 vim nmap <Leader>qae :qa!<CR> " 设置快捷键遍历子窗口 " 依次遍历 nnoremap <Leader>ww <C-W><C-W> " 跳转至右方的窗口 nnoremap <Leader>wl <C-W>l " 跳转至方的窗口 nnoremap <Leader>wh <C-W>h " 跳转至上方的子窗口 nnoremap <Leader>wk <C-W>k " 跳转至下方的子窗口 nnoremap <Leader>wj <C-W>j " 定义快捷键在结对符之间跳转,助记 pair nmap <Leader>pa % " << " 插件管理 " 将 pathogen 自身也置于独立目录中,需指定其路径 runtime bundle/pathogen/autoload/pathogen.vim " 运行 pathogen execute pathogen#infect() " 将外部命令 wmctrl 控制窗口最大化的命令行参数封装成一个 vim 的函数 fun! ToggleFullscreen() call system("wmctrl -ir " . v:windowid . " -b toggle,fullscreen") endf " 全屏开/关快捷键 nmap <silent> <Leader>full :call ToggleFullscreen()<CR> " 启动 vim 时自动全屏 "autocmd VimEnter * call ToggleFullscreen() " << " >> " 其他美化 " 设置状态栏主题风格 "let g:Powerline_colorscheme='solarized256' " << " >> " 缩进 " 缩进可视化插件 Indent Guides " 随 vim 自启动 let g:indent_guides_enable_on_vim_startup=1 " 从第二层开始可视化显示缩进 let g:indent_guides_start_level=2 " 色块宽度 let g:indent_guides_guide_size=1 " 快捷键 i 开/关缩进可视化 nmap <silent> <Leader>i <Plug>IndentGuidesToggle " << " >> " 接口与实现快速切换 " *.cpp 和 *.h 间切换 nmap <Leader>ch :A<CR> " 子窗口中显示 *.cpp 或 *.h nmap <Leader>sch :AS<CR> " << " >> " 代码收藏 " 自定义 vim-signature 快捷键 let g:SignatureMap = { \ 'Leader' : "m", \ 'PlaceNextMark' : "m,", \ 'ToggleMarkAtLine' : "m.", \ 'PurgeMarksAtLine' : "m-", \ 'DeleteMark' : "dm", \ 'PurgeMarks' : "mda", \ 'PurgeMarkers' : "m<BS>", \ 'GotoNextLineAlpha' : "']", \ 'GotoPrevLineAlpha' : "'[", \ 'GotoNextSpotAlpha' : "`]", \ 'GotoPrevSpotAlpha' : "`[", \ 'GotoNextLineByPos' : "]'", \ 'GotoPrevLineByPos' : "['", \ 'GotoNextSpotByPos' : "mn", \ 'GotoPrevSpotByPos' : "mp", \ 'GotoNextMarker' : "[+", \ 'GotoPrevMarker' : "[-", \ 'GotoNextMarkerAny' : "]=", \ 'GotoPrevMarkerAny' : "[=", \ 'ListLocalMarks' : "ms", \ 'ListLocalMarkers' : "m?" \ } " << " >> " 代码导航 " 基于标签的代码导航 " 设置插件 indexer 调用 ctags 的参数 " 默认 --c++-kinds=+p+l,重新设置为 --c++-kinds=+l+p+x+c+d+e+f+g+m+n+s+t+u+v " 默认 --fields=+iaS 不满足 YCM 要求,需改为 --fields=+iaSl let g:indexer_ctagsCommandLineOptions="-R --languages=c,c++ --c-kinds=+p --c++-kinds=+l+p+x+c+d+e+f+g+m+n+s+t+u+v --fields=+iaSl --extra=+q" " 正向遍历同名标签 nmap <Leader>tn :tnext<CR> " 反向遍历同名标签 nmap <Leader>tp :tprevious<CR> " 基于语义的代码导航 nnoremap <leader>jd :YcmCompleter GoToDeclaration<CR> " 只能是 #include 或已打开的文件 nnoremap <leader>je :YcmCompleter GoToDefinition<CR> nnoremap <leader>ye :YcmDiags<CR> " << " >> " 标签列表 " 设置 tagbar 子窗口的位置出现在主编辑区的左边 let tagbar_left=1 " 设置显示/隐藏标签列表子窗口的快捷键。速记:tag list nnoremap <Leader>tl :TagbarToggle<CR> " 设置标签子窗口的宽度 let tagbar_width=32 " tagbar 子窗口中不显示冗余帮助信息 let g:tagbar_compact=1 " 设置 ctags 对哪些代码元素生成标签 let g:tagbar_type_cpp = { \ 'ctagstype' : 'c', \ 'kinds' : [ \ 'd:macros:1', \ 'g:enums', \ 't:typedefs:0:0', \ 'e:enumerators:0:0', \ 'n:namespaces', \ 'c:classes', \ 's:structs', \ 'u:unions', \ 'f:functions', \ 'm:members:0:0', \ 'v:global:0:0', \ 'x:external:0:0', \ 'l:local:0:0' \ ], \ 'sro' : '::', \ 'kind2scope' : { \ 'g' : 'enum', \ 'n' : 'namespace', \ 'c' : 'class', \ 's' : 'struct', \ 'u' : 'union' \ }, \ 'scope2kind' : { \ 'enum' : 'g', \ 'namespace' : 'n', \ 'class' : 'c', \ 'struct' : 's', \ 'union' : 'u' \ } \ } " << " 模板补全 " UltiSnips 的 tab 键与 YCM 冲突,重新设定 "let g:UltiSnipsSnippetDirectories=["mysnippets"] let g:UltiSnipsExpandTrigger="<leader><tab>" let g:UltiSnipsJumpForwardTrigger="<leader><tab>" let g:UltiSnipsJumpBackwardTrigger="<leader><s-tab>" " >> " YCM 补全 " YCM 补全菜单配色 " 菜单 highlight Pmenu ctermfg=2 ctermbg=3 guifg=#005f87 guibg=#EEE8D5 " 选中项 highlight PmenuSel ctermfg=2 ctermbg=3 guifg=White guibg=grey20 highlight YcmErrorLine guibg=#EEE8D5 highlight SyntasticErrorLine guibg=#EEE8D5 " 补全功能在注释中同样有效 let g:ycm_complete_in_comments=1 " 允许 vim 加载 .ycm_extra_conf.py 文件,不再提示 let g:ycm_confirm_extra_conf=0 " 开启 YCM 标签补全引擎 let g:ycm_collect_identifiers_from_tags_files=1 " 引入 C++ 标准库 tags set tags+=/data/misc/software/app/vim/stdcpp.tags set tags+=/usr/include/sys.tags " YCM 集成 OmniCppComplete 补全引擎,设置其快捷键 inoremap <leader>; <C-x><C-o> " 补全内容不以分割子窗口形式出现,只显示补全列表 set completeopt-=preview " 从第一个键入字符就开始罗列匹配项 let g:ycm_min_num_of_chars_for_completion=1 " 禁止缓存匹配项,每次都重新生成匹配项 let g:ycm_cache_omnifunc=0 " 语法关键字补全 let g:ycm_seed_identifiers_with_syntax=1 let g:clang_library_path='/root/.vim/bundle/YouCompleteMe/third_party/ycmd' " << " 静态分析器 syntastic 错误标识 let g:syntastic_error_symbol = '✗' let g:syntastic_warning_symbol = '⚠' " >> " 由接口快速生成实现框架 " 设置 pullproto.pl 脚本路径 let g:protodefprotogetter='~/.vim/bundle/vim-protodef/pullproto.pl' " 成员函数的实现顺序与声明顺序一致 let g:disable_protodef_sorting=1 " << " >> " 库信息参考 " 启用:Man命令查看各类man信息 source $VIMRUNTIME/ftplugin/man.vim " 定义:Man命令查看各类man信息的快捷键 nmap <Leader>man :Man 3 <cword><CR> " << " >> " 工程文件浏览 " 使用 NERDTree 插件查看工程文件。设置快捷键,速记:file list nmap <Leader>fl :NERDTreeToggle<CR> " 设置 NERDTree 子窗口宽度 let NERDTreeWinSize=22 " 设置 NERDTree 子窗口位置 let NERDTreeWinPos="right" " 显示隐藏文件 let NERDTreeShowHidden=1 " NERDTree 子窗口中不显示冗余帮助信息 let NERDTreeMinimalUI=1 " 删除文件时自动删除文件对应 buffer let NERDTreeAutoDeleteBuffer=1 " << " >> " 多文档编辑 " 显示/隐藏 MiniBufExplorer 窗口 "map <Leader>bl :MBEToggle<cr> " buffer 切换快捷键 "map <C-Tab> :MBEbn<cr> "map <C-S-Tab> :MBEbp<cr> " << " >> " 环境恢复 " 设置环境保存项 set sessionoptions="blank,globals,localoptions,tabpages,sesdir,folds,help,options,resize,winpos,winsize" " 保存快捷键 map <leader>ss :mksession! my.vim<cr> :wviminfo! my.viminfo<cr> " 恢复快捷键 map <leader>rs :source my.vim<cr> :rviminfo my.viminfo<cr> map <Leader>mg ::%s/ /\r/g<CR> " << " 设置快捷键实现一键编译及运行 nmap <Leader>m :wa<CR> :cd build/<CR> :!rm -rf main<CR> :!cmake CMakeLists.txt<CR>:make<CR><CR> :cw<CR> :cd ..<CR> nmap <Leader>g :wa<CR>:cd build/<CR>:!rm -rf main<CR>:!cmake CMakeLists.txt<CR>:make<CR><CR>:cw<CR>:cd ..<CR>:!build/main<CR> " >> " 查找 " 使用 Grep.vim 插件在工程内全局查找,设置快捷键。快捷键速记法:search in project nnoremap <Leader>sp :Grep -ir<CR><CR><CR> " 使用 Grep.vim 插件在工程内全局查找,设置快捷键。快捷键速记法:search in buffer nnoremap <Leader>sb :GrepBuffer -ir<CR><CR> " << " >> " 替换 " 替换函数。参数说明: " confirm:是否替换前逐一确认 " wholeword:是否整词匹配 " replace:被替换字符串 function! Replace(confirm, wholeword, replace) wa let flag = '' if a:confirm let flag .= 'gec' else let flag .= 'ge' endif let search = '' if a:wholeword let search .= '\<' . escape(expand('<cword>'), '/\.*$^~[') . '\>' else let search .= expand('<cword>') endif let replace = escape(a:replace, '/\&~') execute 'argdo %s/' . search . '/' . replace . '/' . flag . '| update' endfunction " 不确认、非整词 nnoremap <Leader>R :call Replace(0, 0, input('Replace '.expand('<cword>').' with: '))<CR> " 不确认、整词 nnoremap <Leader>rw :call Replace(0, 1, input('Replace '.expand('<cword>').' with: '))<CR> " 确认、非整词 nnoremap <Leader>rc :call Replace(1, 0, input('Replace '.expand('<cword>').' with: '))<CR> " 确认、整词 nnoremap <Leader>rcw :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR> nnoremap <Leader>rwc :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR> " << " >> " web 前端 " surrond 添加 <p> 元素的快捷键 nmap <Leader>ap yss<p><CR> " 对 HTML 元素进行转义:< -> <、> -> >、& -> &、空格 -> 、行尾添加 <br /> " 先后顺序敏感 function HtmlEscape() retab<CR> silent s/&/\&/eg silent s/</\</eg silent s/>/\>/eg silent s/ /\ /eg silent s/$/<br \/>/eg endfunction vnoremap <Leader>he :call HtmlEscape()<CR> """ "回到上次打开文件的位置 if has("autocmd") " In text files, always limit the width of text to 78 characters autocmd BufRead *.txt set tw=78 " When editing a file, always jump to the last cursor position autocmd BufReadPost * \ if line("'\"") > 0 && line ("'\"") <= line("$") | \ exe "normal g'\"" | \ endif endif "cscope cs add cscope.out set cscopequickfix=s-,c-,d-,i-,t-,e- nmap <Leader>css :cs find s <cword><CR> nmap <Leader>csg :cs find g <cword><CR> nmap <Leader>csc :cs find c <cword><CR> nmap <Leader>cst :cs find t <cword><CR> nmap <Leader>cse :cs find e <cword><CR> nmap <Leader>csf :cs find f <cword><CR> nmap <Leader>csi :cs find i <cword><CR> nmap <Leader>csd :cs find d <cword><CR> "<< "grep "nnoremap <silent> <F3> :Rgrep<CR> nmap <Leader>gr :Rgrep<CR> let Grep_Default_Filelist = '*.c *.cpp *.asm *.h' let Grep_Skip_Files = '*.bak *~ *.tags *.out *.o' let Grep_Default_Options = '-i' " << " quickfix nmap <Leader>qo :copen<CR> nmap <Leader>qc :cclose<CR> "ctags 的ts nmap <Leader>ts :ts<CR> "<< "原型提示:echofunc let g:EchoFuncKeyNext='<C-n>' let g:EchoFuncKeyPrev='<C-p>' "<< " 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=0 " Split left. let g:bufExplorerSplitVertical=1 " Split vertically. let g:bufExplorerSplitVertSize = 30 " Split width let g:bufExplorerUseCurrentWindow=1 " Open in new window. nnoremap <leader>be :BufExplorer<CR> nnoremap <leader>bs :BufExplorerHorizontalSplit<CR> nnoremap <leader>bv :BufExplorerVerticalSplit<CR> "<< let g:Powerline_symbols = 'fancy' "python jedi let g:jedi#use_tabs_not_buffers = 0 let g:jedi#popup_on_dot = 0 "<< " map <F4> :call TitleDet()<cr>'s function AddTitle() call append(0,"/********************************************************************************") call append(1,"#") call append(2,"# Author: songdeling - songdeling@doov.com.cn") call append(3,"#") call append(4,"# Last modified: ".strftime("%Y-%m-%d %H:%M")) call append(5,"#") call append(6,"# Filename: ".expand("%:t")) call append(7,"#") call append(8,"# Description: ") call append(9,"#") call append(10,"*********************************************************************************/") echohl WarningMsg | echo "Successful in adding the copyright." | echohl None endf function TitleDet() let n=1 "默认为添加 while n < 10 let line = getline(n) if line =~ '^\#\s*\S*Last\smodified:\S*.*$' call UpdateTitle() return endif let n = n + 1 endwhile call AddTitle() endfunction "更新最近修改时间和文件名 function UpdateTitle() normal m' execute '/# *Last modified:/s@:.*$@\=strftime(":\t%Y-%m-%d %H:%M")@' normal '' normal mk execute '/# *Filename:/s@:.*$@\=":\t\t".expand("%:t")@' execute "noh" normal 'k echohl WarningMsg | echo "Successful in updating the copy right." | echohl None endfunction