天天看點

我的vim配置檔案

  強烈擁護開源精神,高舉開源大旗,今天我就分享下我自己結合網上還有自己實際使用配的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/