強烈擁護開源精神,高舉開源大旗,今天我就分享下我自己結合網上還有自己實際使用配的vimrc,可以給各位參考下,不要見笑,具體說明我在rc裡寫的也很詳細,可以具體看下,也希望可以借這個機會能多認識認識幾個Vimer們.
PS: 比如說轉移工作環境或者切換主機,比較便捷到做法就是安裝好vim之後,一遍git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle,将vundle插件裝好之後,一陣BundleInstall,即可完美切換到你以前使用到Vim環境,十分友善. 另外主題下載下傳之後拷貝到.vim/colors之後即可适配,位址在.vimrc内部,還有monaco字型配置可以直接git clone https://github.com/jiyinyiyong/monaco-font.git/
"========================================
" File Name: .vimrc
" Description: Vim配置文檔
let mapleader = ','
let g:mapleader = ','
"==========================================
" General Settings
" 開啟文法高亮
syntax enable
" 開啟文法高亮
syntax on
" 設定字型
set guifont=Monaco\ 12
" 設定曆史記錄條數
set history=2000
" 檢測檔案類型
filetype on
" 針對不同的檔案,采用不同的縮進方式
filetype indent on
" 允許插件
filetype plugin on
" 啟動自動補全
filetype plugin indent on
" 檔案修改之後自動讀入
set autoread
" 啟動後不顯示提示
"set shortmess=atI
" 備份,到另一個位置. 防止誤删, 目前是取消備份
"set backup
"set backupext=.bak
"set backupdir=/tmp/vimbk/
" 設定取消備份,禁止臨時檔案生成
set nobackup
set noswapfile
" create undo file
set undolevels=1000 " how many undos
set undoreload=10000 " number of lines to save for undo
if v:version >= 730
set undofile " keep a persistent backup file
set undodir=/tmp/vimundo/
endif
"set wildignore=*.swp,*.bak,*.pyc,*.class,.svn
" 顯示目前橫豎線
"set cursorline
"set cursorcolumn
" 設定退出Vim之後内容顯示在終端螢幕,可以用于檢視和複制
" 好處:誤删什麼,如果以前螢幕打開可以用來找回
" set t_ti= t_te=
" 設定在Vim中可以使用滑鼠,防止終端無法拷貝
set mouse=a
" 修複ctrl+m多光标操作選擇的bug,但是改變了ctrl+v進行字元選中将包含光标下的字元
" set selection=inclusive
" set selectmode=mouse,key
" no errors sound
set title " change ther terminal's title
set novisualbell " don't beep
set noerrorbells " don't beep
set t_vb=
set tm=500
" remember info about open buffers on close
set viminfo^=%
" for regular expression turn magic on
set magic
" configure backspace so it acts as it should act
set backspace=eol,start,indent
set whichwrap+=<,>,h,l
" FuzzyFinder and ctrlp couldn't auto change dir you must manual add cd in
" command mode, so add this command to auto change current dir for these
" plugins
" set autochdir
" Display Settings
"
" 顯示目前行号和列号
set ruler
" 在狀态欄顯示正在輸入的指令
set showcmd
" 左下角顯示目前Vim模式
set showmode
" 光标移動至少保留的行數
"set scrolloff=7
" 指令行(在狀态行下)的高度,預設為1,這裡是2
set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P
" 總是顯示狀态欄(Powerline需要2行)
set laststatus=2
" 顯示行号
set number
" 指定不折行
set nowrap
" 設定代碼比對,包括括号比對情況
set showmatch
" how many tenths of a second to blink when matching brackets
" setmatchtime=2
" 開啟及時搜尋(is)
set incsearch
" 設定搜尋高亮(hlsearch)
set hls
" 設定搜尋時忽略大小寫
set ignorecase
" 當搜尋的時候嘗試smart
set smartcase
" 設定代碼折疊
"set foldenable
" 折疊方法
" manual 手工折疊
" indent 縮進折疊
" expr 表達式折疊
" syntax 文法折疊
" diff 對沒有更改的檔案折疊
" marker 标記折疊
"set foldmethod=indent
"set foldlevel=99
" 設定C/C++方式自動對齊
set autoindent
set cindent
set smartindent
" 設定tab寬度
set tabstop=4
" 設定自動對齊空格數
set shiftwidth=4
" 按倒退鍵時可以一次删除4個空格
"set softtabstop=4
" 編輯的時候将所有的tab設定為空格(expandtab)
set et
" 使用Backspace直接删除tab
set smarttab
" 不在單詞中間折行
set lbr
" 縮進時取整use multiple of shiftwidth when indenting with '<' and '>'
" set shiftround
" a buffer becomes hidden when it is abandoned
" set hidden
" set wildmode=list:longest
" set ttyfast
" 00x增減數字時使用十進制
"set nrformats=
" FileEncode Settings
" 設定編碼方式
set encoding=utf-8
" 設定打開檔案的編碼格式
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set helplang=cn
" 隻對終端影響(預設)
set termencoding=utf-8
" use UNIX as the standard file type
set ffs=unix,dos,mac
" 如遇Unicode值大于255的文本,不必等到空格再折行。
set formatoptions+=m
" 合并兩行中文時,不在中間加空格:
set formatoptions+=B
" Other Settings
"autocmd! bufwritepost _vimrc source % " .vimrc修改之後自動加載(Windows)
"autocmd! bufwritepost .vimrc source % " .vimrc修改之後自動加載(Linux)
" 自動補全配置讓Vim補全菜單行為跟IDE一緻
set completeopt=longest,menu
" 增強模式中的指令行自動完成操作
set wildmenu
" ignore compiled files
" set wildignore=*.o,*~,*.pyc,*.class
"離開插入模式後自動關閉預覽視窗
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
"回車即選中目前項
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"
"上下左右鍵的行為 會顯示其他資訊
inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>"
" if this not work ,make sure .viminfo is writable for you
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
" HotKey Settings
" 去掉搜尋高亮
"noremap <silent><leader>/ :nohls<CR>
map <leader>/ :nohls<CR>
map <leader>tn :tabnew<cr>
map <leader>to :tabonly<cr>
map <leader>tc :tabclose<cr>
map <leader>tm :tabmove
" Opens a new tab with the current buffer's path
" Super useful when editing files in the same directory
map <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/
" Quickly edit/reload the vimrc file
nmap <silent> <leader>ev :e $MYVIMRC<CR>
nmap <silent> <leader>sv :so $MYVIMRC<CR>
" 手動重新整理tags(含cscope)
nmap tg :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q *<CR>:set tags+=./tags<CR>:!cscope -Rbq<CR>:cs add ./cscope.out .<CR>
" 切換buffer
nnoremap [b :bp<CR>
nnoremap ]b :bn<CR>
" cscope設定
if has("cscope")
set csprg=/usr/bin/cscope " 制定cscope指令
set csto=0 " ctags查找順序,0表示先cscope資料庫再标簽檔案,1表示先标簽檔案愛
set cst " 同時搜尋tag檔案和cscope資料庫
set cscopequickfix=s-,c-,d-,i-,t-,e- "使用QucikFix視窗來顯示cscope查找結果
set nocsverb
if filereadable("cscope.out") "如果目前目錄下有cscope.out則加載進Vim
cs add cscope.out
elseif $CSCOPE_DB != "" "否則隻要環境變量不為空就添加制定的資料庫到Vim
cs add $CSCOPE_DB
endif
set csverb
"map <F4>:!cscope -Rbq<CR>:cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
" 查找符号
nmap <leader>css :cs find s <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
" 查找定義
nmap <leader>csg :cs find g <C-R>=expand("<cword>")<CR><CR>
" 查找被這個函數調用的函數
nmap <leader>csd :cs find d <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
" 查找調用這個函數的函數
nmap <leader>csc :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR><CR>
" 查找這個字元串
nmap <leader>cst :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR><CR>
" 查找這個egrep比對模式
nmap <leader>cse :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR><CR>
" 查找這個檔案
nmap <leader>csf :cs find f <C-R>=expand("<cfile>")<CR><CR>
" 查找include這個檔案的檔案
nmap <leader>csi :cs find i <C-R>=expand("<cfile>")<CR><CR> :copen<CR><CR>
" 設定是否使用QuickFix來顯示結果
set cscopequickfix=s-,c-,d-,i-,t-,e-
" QuickFix open and close
nnoremap <F11> :copen<CR>
nnoremap <F12> :cclose<CR>
" QucikFix next and prev
nnoremap <F9> :cn<CR>
nnoremap <F10> :cp<CR>
" Theme Settings
" Set extra options when running in GUI mode
"if has("gui_running")
" set guifont=Monaco\ 12
" set guioptions-=T
" set guioptions+=e
" set guioptions-=r
" set guioptions-=L
" set guitablabel=%M\ %t
" set showtabline=1
" set linespace=2
" set noimd
" set t_Co=256
"endif
" 設定主題
set background=dark
colorscheme molokai
"colorscheme solarized
set t_Co=256
" 添加水準滾動條
"set guioptions+=b
" 取消菜單欄和導航欄
set guioptions-=m
set guioptions-=T
" 去除左右兩邊滾動條
set go-=r
set go-=L
" 設定水準行數和豎直列數
set lines=35
set columns=99
" 使pathogen生效(插件管理器,隻需将插件放入bundle,将pathogen.vim放入autoload即可)
"execute pathogen#infect()
" Vundle Settings
" 關閉vi的一緻性模式,避免以前版本的一些Bug和局限
set nocompatible
filetype off " Vundle必須要求使用filetype off,如果不設定該選項,UltiSnips無法使用
if has('win32') || has('win64')
set rtp+=$HOME/vimfiles/vundle
call vundle#rc('$HOME/vimfiles/bundle/')
else
set rtp+=~/.vim/bundle/vundle
call vundle#rc()
endi
" let Vundle manage Vundle
" required
Bundle 'gmarik/vundle'
" My bundles here:
" original repos on GitHub
Bundle 'tpope/vim-fugitive'
Bundle 'Lokaltog/vim-easymotion'
" 自動補全單引号,雙引号等
Bundle 'Raimondi/delimitMate'
" 快速加入修改環繞字元
Bundle 'tpope/vim-surround'
" for repeat -> enhance surround.vim, . to repeat command
Bundle 'tpope/vim-repeat'
" 多光标編輯 (該插件的ctrl-p可以正常使用,當到達最後一個的時候ctrlp才會起作用)
Bundle 'terryma/vim-multiple-cursors'
" 對括号等進行光标的控制輔助
"Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}
"Bundle 'tpope/vim-rails.git'
Bundle 'Valloric/ListToggle'
Bundle 'L9'
" vim-scripts repos
Bundle 'a.vim'
Bundle 'grep.vim'
"Bundle 'easytags.vim'
"Bundle 'c.vim'
" non-GitHub repos
"Bundle 'git://git.wincent.com/command-t.git'
" Git repos on your local machine (i.e. when working on your own plugin)
"Bundle 'file:///Users/gmarik/path/to/plugin'
" ctrlp settings
Bundle 'kien/ctrlp.vim'
"let g:ctrlp_map = '<leader>p'
"let g:ctrlp_cmd = 'CtrlP'
"map <leader>f :CtrlPMRU<CR>
"set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux
"let g:ctrlp_custom_ignore = {
" \ 'dir': '\v[\/]\.(git|hg|svn|rvm)$',
" \ 'file': '\v\.(exe|so|dll|zip|tar|tar.gz)$',
" \ 'link': 'SOME_BAD_SYMBOLIC_LINKS',
" \ }
let g:ctrlp_custom_ignore = {
\ 'file': '\v\.(exe|so|dll|zip|tar|tar.gz|lib|out|png|img|bak|db|o)'
\ }
" 在每次進行切換分支或者重新設定custome_ignore選項的時候,必須手動清除CtrlP的緩存,
" 也可以使用下句不讓它進行緩存處理,但掃描時間會比較耗時
"let g:ctrlp_use_caching = 0
let g:ctrlp_working_path_mode=0
let g:ctrlp_match_window_bottom=1
let g:ctrlp_max_height=15
let g:ctrlp_match_window_reversed=0
let g:ctrlp_mruf_max=500
let g:ctrlp_follow_symlinks=1
nnoremap <leader>b :CtrlPBuffer<CR>
nnoremap <leader>d :CtrlPDir<CR>
"==============================================================
" ctrlp-funky settings ctrlp插件 - 不用ctag進行函數快速跳轉
Bundle 'tacahiroy/ctrlp-funky'
"nnoremap <Leader>fu :CtrlPFunky<Cr>
nnoremap <Leader>f :CtrlPFunky<Cr>
" narrow the list down with a word under cursor
"nnoremap <Leader>fU :execute 'CtrlPFunky ' . expand('<cword>')<Cr>
let g:ctrlp_funky_syntax_highlight = 1
let g:ctrlp_extensions = ['funky']
" nerdcommenter settings 快速注釋
Bundle 'scrooloose/nerdcommenter'
" 注釋與代碼之間留存的空格數
let g:NERDSpaceDelims = 1
" Airline settings
"Bundle 'bling/vim-airline'
"Bundle 'bling/vim-bufferline'
"if !exists('g:airline_symbols')
"let g:airline_symbols = {}
"let g:airline_left_sep = '▶'
"let g:airline_left_alt_sep = ''
"let g:airline_right_sep = '◀'
"let g:airline_right_alt_sep = ''
"let g:airline_symbols.linenr = '¶'
"let g:airline_symbols.branch = '⎇'
"" 開啟tabline
"let g:airline#extensions#tabline#enabled = 1
"" tabline中目前buffer兩端的分隔符
"let g:airline#extensions#tabline#left_sep = ' '
"" tabline為激活的buffer的兩端字元
"let g:airline#extensions#tabline#left_alt_sep = '|'
"" tabline中buffer顯示編号
"let g:airline#extensions#tabline#buffer_nr_show = 1
"let g:airline#extensions#buffline#enabled = 1
"let g:airline#extensions#bufferline#overwrite_variables = 1
"" airline主題
"let g:airline_theme = 'powerlineish'
"括号顯示增強
"Bundle 'kien/rainbow_parentheses.vim'
"let g:rbpt_colorpairs = [
" \ ['brown', 'RoyalBlue3'],
" \ ['Darkblue', 'SeaGreen3'],
" \ ['darkgray', 'DarkOrchid3'],
" \ ['darkgreen', 'firebrick3'],
" \ ['darkcyan', 'RoyalBlue3'],
" \ ['darkred', 'SeaGreen3'],
" \ ['darkmagenta', 'DarkOrchid3'],
" \ ['brown', 'firebrick3'],
" \ ['gray', 'RoyalBlue3'],
" \ ['black', 'SeaGreen3'],
" \ ['Darkblue', 'firebrick3'],
" \ ['darkgreen', 'RoyalBlue3'],
" \ ['darkcyan', 'SeaGreen3'],
" \ ['darkred', 'DarkOrchid3'],
" \ ['red', 'firebrick3'],
" \ ]
"let g:rbpt_max = 40
"let g:rbpt_loadcmd_toggle = 0
"au VimEnter * RainbowParenthesesToggle
"au Syntax * RainbowParenthesesLoadRound
"au Syntax * RainbowParenthesesLoadSquare
"au Syntax * RainbowParenthesesLoadBraces
" 主題 solarized
Bundle 'altercation/vim-colors-solarized'
"let g:solarized_termcolors=256
let g:solarized_termtrans=1
let g:solarized_contrast="normal"
let g:solarized_visibility="normal"
" 主題 molokai
Bundle 'tomasr/molokai'
" TagList settings
Bundle 'taglist.vim'
" increase the width of the taglist window
"let Tlist_WinWidth=20
" 自動打開TagList的window
let Tlist_Auto_Open=0
" 當隻剩下Tlist的時候自動關閉
let Tlist_Exit_OnlyWindow=1
" 打開tags用單擊
let Tlist_Use_SingleClick=1
" close tag folders for inactive buffers
let Tlist_File_Fold_Auto_Close=1
" show the fold indiactor column in the taglist window
let Tlist_Enable_Fold_Column=1
" 自動更新TagList包含最新編輯的檔案
let Tlist_Auto_Update=1
" 顯示一個檔案的tag
let Tlist_Show_One_File=1
" 在右側顯示視窗
let Tlist_Use_Right_Window=1
" 按照名稱排序
let Tlist_Sort_Type="name"
" 讓TagList始終解釋檔案中的tag,不管TagList視窗有沒有打開
let Tlist_Process_File_Always=1
" 設定leader鍵
nnoremap <leader>tl :TlistToggle<CR>
" YouCompleteMe settings
Bundle 'Valloric/YouCompleteMe'
"let g:ycm_key_list_select_completion=['<c-n>']
"let g:ycm_key_list_previous_completion=['<c-p>']
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py'
let g:ycm_collect_indentifiers_from_tags_files=1
let g:ycm_seed_identifiers_with_syntax=1
" 避免YCM每次加載都對使用者提示是否加載
let g:ycm_confirm_extra_conf=0
let g:ycm_autoclose_preview_window_after_completion=1
let g:ycm_complete_in_comments = 1 "在注釋輸入中也能補全
let g:ycm_complete_in_strings = 1 "在字元串輸入中也能補全
let g:ycm_collect_identifiers_from_comments_and_strings = 1 "注釋和字元串中的文字也會被收入補全
" 跳到定義或聲明
nnoremap <F2> :YcmCompleter GoToDefinitionElseDeclaration<CR>
" 強制進行編譯
nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>
" Syntastic settings
Bundle 'scrooloose/syntastic'
" 在打開檔案的時候檢查
let g:syntastic_check_on_open = 1
let g:syntastic_cpp_include_dirs = ['/usr/include/']
let g:syntastic_cpp_remove_include_errors = 1
let g:syntastic_cpp_check_header = 1
let g:syntastic_cpp_compiler = 'clang++'
let g:syntastic_cpp_compiler_options = '-std=c++11 -stdlib=libstdc++'
"set error or warning signs
let g:syntastic_error_symbol = ''
let g:syntastic_warning_symbol = ''
"whether to show balloons
let g:syntastic_enable_balloons = 1
let g:syntastic_always_populate_loc_list = 1
" ListToggle settings
let g:lt_location_list_toggle_map = '<leader>l'
let g:lt_quickfix_list_toggle_map = '<leader>q'
" NERDtree settings
Bundle 'scrooloose/nerdtree'
let NERDTreeWinPos='left'
let NERDTreeHighlightCursorline=1
nnoremap <leader>n :NERDTreeToggle<CR>
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") &&b:NERDTreeType == "primary") | q | endif
" miniBufExpl settings
"Bundle 'fholgado/minibufexpl.vim'
"let g:miniBufExplMapWindowNavVim = 1
"let g:miniBufExplMapWindowNavArrows = 1
"let g:miniBufExplMapCTabSwitchBufs = 1
"let g:miniBufExplModSelTarget = 1
""解決FileExplorer視窗變小問題
"let g:miniBufExplForceSyntaxEnable = 1
"let g:miniBufExplorerMoreThanOne=2
"let g:miniBufExplCycleArround=1
"" 預設方向鍵左右可以切換buffer
"nnoremap <TAB> :MBEbn<CR>
"nnoremap <s-TAB> :MBEbp<CR>
"noremap <leader>bn :MBEbn<CR>
"noremap <leader>bp :MBEbp<CR>
"noremap <leader>bd :MBEbd<CR>
" FuzzyFinder settings
"Bundle 'FuzzyFinder'
"nnoremap <leader>f :FufFile<CR>
"nnoremap <leader>b :FufBuffer<CR>
"nnoremap <leader>d :FufDir<CR>
" UltiSnips settings
Bundle 'SirVer/ultisnips'
Bundle 'honza/vim-snippets'
let g:UltiSnipsExpandTrigger = "<c-j>"
let g:UltiSnipsJumpForwardTrigger = "<c-j>"
let g:UltiSnipsJumpBackwardTrigger = "<c-k>"
" 定義存放代碼片段的檔案夾 .vim/additional_snippets下,使用自定義和預設的,将會的到全局,有沖突的會提示
let g:UltiSnipsSnippetDirectories=["additional_snippets", 'UltiSnips']
" closetag settings 自動補全html/xml标簽
"Bundle 'docunext/closetag.vim'
"let g:closetag_html_style=1
" Markdown settings
"Bundle 'plasticboy/vim-markdown'
"let g:vim_markdown_folding_disabled=1
" Tagbar settings
Bundle 'majutsushi/tagbar'
nnoremap <leader>tb :Tagbar<CR>
let g:tagbar_autofocus = 1
" A settings
nnoremap <F4> :A<CR>
" Powerline settings
Bundle 'Lokaltog/vim-powerline'
let g:Powerline_symbolsa = 'fancy'
let g:Powerline_cache_enabled = 1
""let g:session_autoload='yes'
""let g:session_autosave='yes'
" 因為Vundle需要關閉filetype,而之後的插件如果想要正常使用,必須要打開filetype
" 是以必須確定所有插件的加載過程在之前已經全部添加完畢
filetype on
" 參考連結:
" amix vimrc模闆位址參考:amix.dk/vim/vimrc.html
" k-vim https://github.com/wklken/k-vim
--------------------------------------------------------- End.
轉載請注明:http://www.cnblogs.com/crazyacking/