我的Vim配置(自動補全/樹形文件瀏覽)


配置文件的下載路徑在這里  http://files.cnblogs.com/files/oloroso/vim.configure.xz.gz 

這實際上是一個 xz 格式的文件,添加的 gz 文件后綴是因為博客園上傳文件的限制

 

 

.vimrc文件的內容如下

"==========================================================================
"=======================   基本顯示設置   ==================================
"==========================================================================

"---------------------------------------------------------------------------
" 行號與標尺
set ruler                   " 右下角顯示光標位置的狀態行
set number                  " 顯示行號
set cursorline              " 突出顯示當前行

"設置行號的顏色和背景(這在設置了colorscheme可能會無效)
if has("gui_running")
    highlight LineNr guifg=red        " gui模式下字體顏色設置
    highlight LineNr guibg=white    " gui模式下背景顏色設置
else
    highlight LineNr ctermfg=yellow    " 彩色終端下字體顏色設置
    highlight LineNr ctermbg=blue    " 彩色終端下背景顏色設置
endif

"---------------------------------------------------------------------------
" 制表符(設置所有的tab和縮進為4個空格)
set tabstop=4               " 設置tab鍵的寬度
set shiftwidth=4            " 換行時行間交錯使用4個空格
" set cindent shiftwidth=4   " 自動縮進4空格
set softtabstop=4
" set expandtab               " 使用空格來替換tab
set smarttab                " 開啟新行時使用智能 tab 縮進

" set list                     " 顯示Tab符,
" set listchars=tab:\|\ ,      " 使用一高亮豎線代替 把符號顯示為 |
" set listchars=tab:>-,trail:-
" set listchars=tab:\|\ ,nbsp:%,trail:-

" match LeaderTab /\t/        " 匹配行首tab

"---------------------------------------------------------------------------
" 縮進
set autoindent              " 設置自動縮進(即每行的縮進值與上一行相等)
set smartindent             " 設置智能縮進

set cindent            " 使用 C/C++ 語言的自動縮進方式
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s     "設置C/C++語言的具體縮進方式

"---------------------------------------------------------------------------
" 行控制
set linebreak               " 英文單詞在換行時不被截斷
set nocompatible            " 設置不兼容VI
"set textwidth=80           " 設置每行80個字符自動換行,加上換行符
set wrap                   " 設置自動折行
"set nowrap                    " 設置不自動折行

"---------------------------------------------------------------------------
" 命令行與狀態行
set laststatus=2                          " 開啟狀態欄信息
set cmdheight=1                           " 命令行的高度,默認為1,這里設為2
set showcmd                "狀態欄顯示當前輸入命令
set showmode            "命令行顯示vim當前模式

" 狀態行顯示的內容 [包括系統平台、文件類型、坐標、所占比例、時間等]
" set statusline=%{fugitive#statusline()}\ %F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %y%r%m%*%=\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}
" set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v]\ [%p%%]\ [LEN=%L]

" line color
" now set it up to change the status line based on mode
if version >= 700
    au InsertEnter * hi StatusLine term=reverse ctermbg=5 gui=undercurl guisp=Magenta
    au InsertLeave * hi StatusLine term=reverse ctermfg=0 ctermbg=2 gui=bold,reverse
endif

function! InsertStatuslineColor(mode)
    if a:mode == 'i'
        hi statusline guibg=magenta
    elseif a:mode == 'r'
        hi statusline guibg=blue
    else
        hi statusline guibg=red
    endif
endfunction

au InsertEnter * call InsertStatuslineColor(v:insertmode)
au InsertChange * call InsertStatuslineColor(v:insertmode)
au InsertLeave * hi statusline guibg=green

"---------------------------------------------------------------------------
"括號配對
set showmatch               " 顯示括號配對情況
set iskeyword+=_,$,@,%,#,-  " 帶有如下符號的單詞不要被換行分割
"set wildmenu "打開 wildmenu 選項,啟動具有菜單項提示的命令行自動完成。
"set matchpairs=(:),{:},[:],<:>
"set whichwrap=b,s,<,>,[,]

"---------------------------------------------------------------------------
" 配色方案
"colorscheme default         " 配色方案


"==========================================================================
"=======================   基本使用增強設置   ===============================
"==========================================================================


" 搜索
set hlsearch                " 開啟高亮顯示結果
set incsearch               " 開啟實時搜索功能(輸入字符串就跳到匹配位置)
"set noincsearch            " 關閉顯示查找匹配過程
"set magic                  " Set magic on, for regular expressions
"set showmatch              " Show matching bracets when text indicator is over them
"set mat=2                  " How many tenths of a second to blink
set ignorecase              " 搜索時無視大小寫
set nowrapscan              " 搜索到文件兩端時不重新搜索

"---------------------------------------------------------------------------
" 備份與緩存
set nobackup
set nowb
"set noswapfile
set writebackup             " 設置無備份文件

"---------------------------------------------------------------------------
" 自動完成
set complete=.,w,b,k,t,i
set completeopt=longest,menu " 只在下拉菜單中顯示匹配項目,並且會自動插入所有匹配項目的相同文本
set autoread                " 當文件在外部被修改,自動更新該文件

set autowrite        " 自動把內容寫回文件: 如果文件被修改過,在每個 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令時進行;用 :buffer、CTRL-O、CTRL-I、'{A-Z0-9} 或 `{A-Z0-9} 命令轉到別的文件時亦然。

"---------------------------------------------------------------------------
" 鼠標和退格鍵
set backspace=2             " 設置退格鍵可用
if has('mouse')
    set mouse=a                 " 鼠標可用
endif
set ve=block                "光標可以定位在沒有實際字符的地方
"set fullscreen             " 啟動后自動全屏

"---------------------------------------------------------------------------
" 工作目錄和剪貼板
set nocompatible            " 關閉vi兼容模式
set hidden                  " 允許在有未保存的修改時切換緩沖區
"set relativenumber          " 行標跟隨
set clipboard+=unnamed      " 共享外部剪貼板
set autochdir               " 設定文件瀏覽器目錄為當前目錄


set history=80              "保存80條歷史記錄

"讓vim記憶文件上次編輯的位置
autocmd BufReadPost *
        \ if line("'\"")>0&&line("'\"")<=line("$") |
        \ exe "normal g'\"" |
        \ endif

"==========================================================================
"=======================   文件相關配置   ==================================
"==========================================================================

" 文件類型相關
filetype indent on          " 針對不同的文件類型采用不同的縮進格式
filetype plugin on          " 針對不同的文件類型加載對應的插件
filetype plugin indent on
filetype on                 " for taglist

"---------------------------------------------------------------------------
" 默認為 UTF-8 編碼
"---------------------------------------------------------------------------
if has("multi_byte")    "判斷是否支持多字節
    set encoding=utf-8    "設置編碼為utf-8
    " English messages only
    "language messages zh_CN.utf-8
    set fillchars+=stl:\ ,stlnc:\

    if has('win32')        "windows下
        language english
        let &termencoding=&encoding " 處理consle輸出亂碼
    endif

    set fencs=utf-8,gbk,chinese,latin1
    set formatoptions+=mM
    set nobomb " 不使用 Unicode 簽名

    if v:lang =~? '^\(zh\)\|\(ja\)\|\(ko\)'
        set ambiwidth=double
    endif
else
    echoerr "Sorry, this version of (g)vim was not compiled with +multi_byte"
endif

"---------------------------------------------------------------------------
" 編碼設置
"---------------------------------------------------------------------------
"set fileencoding=utf-8
set encoding=utf-8 "緩沖編碼
set fileencodings=utf-8,cp936,gb18030,big5,gbk,euc-jp,latin1
set fileencoding=utf-8
set termencoding=utf-8 "編碼轉換
"set fileformats=unix

"---------------------------------------------------------------------------
" 換行符設置(win/unix)
" 將指定文件的換行符轉換成 UNIX 格式
autocmd FileType php,javascript,html,css,python,vim,vimwiki  set ff=unix

" 自動載入VIM配置文件
" autocmd! bufwritepost vimrc source $MYVIMRC

"==========================================================================
"=======================   代碼折疊與語法高亮   =============================
"==========================================================================

" Floding 折疊
"set foldmethod=syntax " 選擇代碼折疊類型
"set foldlevel=100 " 禁止自動折疊
"
set foldenable " Enables folding.
" 折疊方法  
" manual    手工折疊  
" indent    使用縮進表示折疊  
" expr      使用表達式定義折疊  
" syntax    使用語法定義折疊  
" diff      對沒有更改的文本進行折疊  
" marker    使用標記進行折疊, 默認標記是 {{{ 和 }}} 
set foldmethod=manual " Set fold method to 'manual'.
""set fdc=0 " Show where folds start and end, when they are opened.
"nnoremap @=((foldclosed(line('.')) < 0 )? 'zc':'zo')

set foldtext=MyFoldText()
function! MyFoldText()
    let line = getline(v:foldstart)
    let sub = substitute(line, '/\*\|\*/\|{{{\d\=', '', 'g')
    return v:folddashes . sub
endfunction


"---------------------------------------------------------------------------
" 語法高亮 
syntax enable               " 打開語法高亮
syntax on                   " 開啟文件類型偵測
autocmd BufRead,BufNewFile *.txt setlocal ft=txt
autocmd BufRead,BufNewFile *.tpl setlocal ft=smarty         " 支持 Smarty
autocmd BufRead,BufNewFile *.as setlocal ft=actionscript    " 支持 ActionScript
autocmd BufRead,BufNewFile *.mxml set filetype=mxml
autocmd BufRead,BufNewFile jquery.*.js set ft=javascript syntax=jquery
autocmd BufRead,BufNewFile *.txtfmt set filetype=txtfmt
autocmd BufRead,BufNewFile *.php set filetype=php
autocmd BufRead,BufNewFile *.c set filetype=c
autocmd BufRead,BufNewFile *.go set filetype=go
autocmd BufRead,BufNewFile *.md set filetype=markdown

autocmd BufNewFile,BufRead,BufEnter,WinEnter,FileType *.m,*.h setf objc  " 增加 Objective-C 語法支持
" 為qml文件添加語法高亮
autocmd BufNewFile,BufRead *.qml set filetype=JavaScript

" fencview 自動編碼識別     :FencView   查看文件編碼和更改文件編碼
let g:fencview_autodetect=1


" 高亮字典dict
" 后面對應的是字典文件的路徑
autocmd FileType javascript set dictionary=~/.vim/dict/javascript.dict
autocmd FileType css        set dictionary=~/.vim/dict/css.dict


"==========================================================================
"=======================   快捷鍵設置   ====================================
"==========================================================================

" 設置','為leader快捷鍵
" let mapleader = ","
" let g:mapleader = ","
" 
" " Ctrl + S 保存文件
" map  <C-s> <ESC>:w <CR>
" imap <C-s> <ESC>:w <CR>
" vmap <C-s> <ESC>:w <CR>
" 
" " Ctrl + C 選中狀態下復制
" vnoremap <C-c> "+y
" 
" " Ctrl + V 粘貼剪切板中的內容
" map  <C-v> "+p
" imap <C-v> <esc>"+pa
" vmap <C-v> d"+P
" 
" " 內容全選快捷鍵
" map <C-a> gg0vG$<cr>
" 
" " nmap <C-t>   :tabnew<cr>
" " nmap <C-p>   :tabprevious<cr>
" " nmap <C-n>   :tabnext<cr>
" " nmap <C-k>   :tabclose<cr>
" " nmap <C-Tab> :tabnext<cr>
" 
" " 選中一段文字並全文搜索這段文字
" vnoremap  *  y/<C-h>=escape(@", '\\/.*$^~[]')<CR><CR>
" vnoremap  #  y?<C-h>=escape(@", '\\/.*$^~[]')<CR><CR>
" 
" " 對齊字體 
" nnoremap <leader>av :'<,'>Align =<cr>
" nnoremap <leader>al :'<,'>left<cr>
" nnoremap <leader>ac :'<,'>center<cr>
" nnoremap <leader>ar :'<,'>right<cr>
" 
" " 設置快速保存和退出
" " 快速保存為,s
" " 快速退出(保存)為,w
" " 快速退出(不保存)為,q
" nmap <leader>s :w!<cr>
" nmap <leader>w :wq!<cr>
" nmap <leader>q :q!<cr>
" 
" inoremap <expr> <leader>x "\<C-X><C-O>"
" 
" " plugins: markdown index
" nnoremap <leader>m :TocdownToggle<cr>
" 
" "切換buffer
" nmap bn :bn<cr>
" nmap bp :bp<cr>



"==========================================================================
"==========================================================================
"\\\\\\\\\\\\\\\\\\\\\\\\   插件相關的配置   ///////////////////////////////
"==========================================================================
"==========================================================================


"==========================================================================
"=======================   Powerline   ====================================
"==========================================================================
"設置powerline狀態欄主題
set guifont=PowerlineSymbols\ for\ Powerline
set nocompatible
set t_Co=256        "設置256色
let g:Powerline_symbols = 'fancy'
 

"==========================================================================
"=======================   TagList   ======================================
"==========================================================================

" TagList 鍵入:Tlist開啟
" if MySys() == "windows"                "設定windows系統中ctags程序的位置
"     let Tlist_Ctags_Cmd = 'ctags'
" elseif MySys() == "linux"              "設定windows系統中ctags程序的位置
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
" endif
map <F4> :TlistToggle<cr>
let Tlist_Show_One_File = 1            "不同時顯示多個文件的tag,只顯示當前文件的
let Tlist_Compact_Format = 1            " 使用小窗口.
let Tlist_Exit_OnlyWindow = 1          "如果taglist窗口是最后一個窗口,則退出vim
let Tlist_Enable_Fold_Column = 0        " 使taglist插件不顯示左邊的折疊行
let Tlist_Use_Right_Window = 1         "在右側窗口中顯示taglist窗口
"let Tlist_Use_Left_Window = 1          " Split to the left side of the screen.
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Inc_Winwidth = 0                " 防止taglist改變終端窗口的大小
let Tlist_WinWidth = 25                " taglist窗口寬度
let Tlist_Sort_Type = 'name'           " 排序 name.

" ---------------------------------------------------------------------------
" Plugin: 
"---------------------------------------------------------------------------
"==========================================================================
"=======================   ctags 文件加載    ===============================
"==========================================================================

set tags=tags
set tags+=./tags    " 添加當前工作目錄下的ctags
set tags+=/usr/include/c++/cpptags    "這是在系統的include目錄下生成的

set tags+=/usr/include/qt5/qt5tags  "qt5的
set tags+=~/pragrom_files/Qt5.4.1/5.4/gcc_64/include

" 按下F5重新生成tag文件,並更新taglist
 map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
 imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>

" ctags 生成c++ tags文件的命令
" ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f cpptags

"==========================================================================
"=======================   omnicppcomplete   ==============================
"==========================================================================
" 按下F3自動補全代碼,注意該映射語句后不能有其他字符,包括tab;否則按下F3會自動補全一些亂碼
imap <F3> <C-X><C-O>
" 按下F2根據頭文件內關鍵字補全
imap <F2> <C-X><C-I>
set completeopt=menu,menuone " 關掉智能補全時的預覽窗口
let OmniCpp_MayCompleteDot = 1 "  在'.'號后是否自動運行omnicppcomplete給出提示信息。0/1, 缺省為1
let OmniCpp_MayCompleteArrow = 1 ""->"后是否自動運行omnicppcomplete給出提示信息。0/1, 缺省為1
let OmniCpp_MayCompleteScope = 1 "  在域標識符"::"后是否自動運行omnicppcomplete給出提示信息。0/1, 缺省為0
let OmniCpp_SelectFirstItem = 2 "  是否自動選擇第一個匹配項。僅當"completeopt"不為"longest"時有效。
                                " 0 : 不選擇第一項(缺省)
                                " 1 : 選擇第一項並插入到光標位置
                                " 2 : 選擇第一項但不插入光標位置
let OmniCpp_NamespaceSearch = 2 " 命名空間查找控制。0 : 禁止查找命名空間
                                " 1 : 查找當前文件緩沖區內的命名空間(缺省)
                                " 2 : 查找當前文件緩沖區和包含文件中的命名空間
let OmniCpp_ShowPrototypeInAbbr = 1 " 是否是補全提示縮略信息中顯示函數原型。0 : 不顯示(缺省) 1 : 顯示原型
let OmniCpp_GlobalScopeSearch=1 " 全局查找控制。0:禁止;1:允許(缺省)
let OmniCpp_DisplayMode=1 " 類成員顯示控制(是否顯示全部公有(public)私有(private)保護(protected)成員)。  0 : 自動  1 : 顯示所有成員
let OmniCpp_DefaultNamespaces=["std"] " 默認命名空間列表,項目間使用','隔開。
let OmniCpp_ShowScopeInAbbr=1    " 選項用來控制匹配項所在域的顯示位置。缺省情況下,omni顯示的補全提示菜單中總是將匹配項所在域信息顯示在縮略信息最后一列。
                                " 0 : 信息縮略中不顯示匹配項所在域(缺省)
                                " 1 : 顯示匹配項所在域,並移除縮略信息中最后一列
let OmniCpp_ShowAccess=1        "是否顯示訪問控制信息('+', '-', '#')。0/1, 缺省為1(顯示)
let OmniCpp_LocalSearchDecl=1        "使用Vim標准查找函數/本地(local)查找函數。
                                "Vim內部用來在函數中查找變量定義的函數需要函數括號位於文本的第一列,而本地查找函數並不需要。

" 提示類型加載
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete


"==========================================================================
"=======================   NERDTree   =====================================
"==========================================================================

" plugin - NERD_tree.vim 以樹狀方式瀏覽系統中的文件和目錄
" :NERDtree 打開NERD_tree         :NERDtreeClose    關閉NERD_tree
" o 打開關閉文件或者目錄         t 在標簽頁中打開
" T 在后台標簽頁中打開           ! 執行此文件
" p 到上層目錄                   P 到根目錄
" K 到第一個節點                 J 到最后一個節點
" u 打開上層目錄                 m 顯示文件系統菜單(添加、刪除、移動操作)
" r 遞歸刷新當前目錄             R 遞歸刷新當前根目錄
"---------------------------------------------------------------------------
let NERDTreeShowBookmarks=1                        " 一直顯示書簽
let loaded_netrwPlugin = 0                         " 不啟動netrw
let NERDTreeCaseSensitiveSort=1                    " 讓文件排列更有序
let NERDTreeHijackNetrw = 0                        " 輸入:e filename不再顯示netrw,而是顯示nerdtree
let NERDTreeChDirMode = 2                          " 改變tree目錄的同時不改變工程的目錄
let NERDTreeWinPos = 'left'                        " NERDTree顯示位置在窗口右側
let NERDTreeWinSize = 25                           " NERDTREE的大小
let NERDTreeIgnore = [ '^\.svn$','^\.git$','\~$' ] " 忽略.svn .git的顯示
" F3 NERDTree 切換
map <F3> :NERDTreeToggle<CR>
imap <F3> <ESC>:NERDTreeToggle<CR>

"---------------------------------------------------------------------------
" Plugin: miniBufExplorer 多個文件切換 可使用鼠標雙擊相應文件名進行切換
" 在 Bufe 內
" <Tab>   向前循環切換到每個buffer名上
" <S-Tab> 向后循環切換到每個buffer名上
" <Enter> 在打開光標所在的buffer
" d       刪除光標所在的buffer
"---------------------------------------------------------------------------
" let g:miniBufExplorerMoreThanOne=0      " 只顯示一個,否則多窗口容易出錯
" let g:miniBufExplMapWindowNavVim = 1    " 允許 MinBuf 使用 ctrl-h,j,k,l 來上下左右選擇窗口
let g:miniBufExplMapWindowNavArrows = 1 " 允許 MinBuf 使用 C-箭頭來切換上下左右窗口
let g:miniBufExplMapCTabSwitchBufs = 1  " 允許 MiniBuf 使用 Ctrl-Tab 和 Ctrl-S-Tab來向前向后切換標簽
" let g:miniBufExplModSelTarget = 1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM