使用方法:
將下述代碼複製、粘貼、保存爲.vimrc文件,放在家目錄下即可。
1、vim基礎功能配置 .vimrc(無插件)
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"編碼、語言設置
set enc=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
set langmenu=zh_CN.UTF-8
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"代碼按照縮進收放
"zR:打開所有
"zM:收起所有
"zc:收起光標所在塊
"zo:打開光標所在塊
"za:光標所在的位置打開/收起狀態取反
set foldmethod=indent
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""自動補全
"":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
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"設置狀態行顯示常用信息
"%= 剩餘的內容向右對齊
"\ 轉義字符
set statusline=%F%=\ asc=%b\ hex=0x%B\ line=%l\[%p%%,%L]\ row=%v\ \ \ \ .
"設置laststatus = 0 ,不顯式狀態行
"設置laststatus = 1 ,僅當窗口多於一個時,顯示狀態行
"設置laststatus = 2 ,總是顯式狀態行
set laststatus=2
" 在被分割的窗口間顯示空白,便於閱讀
set fillchars=vert:\ ,stl:\ ,stlnc:\
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"重映射實際行和屏幕行
nnoremap k gk
nnoremap j gj
nnoremap gj j
nnoremap gk k
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"TAB
"空格代替Tab"
"注意: 插入模式下輸入【ctrl+v+i】可以強制輸入一個tab
set tabstop=4 " tabstop 表示一個 tab 顯示出來是多少個空格的長度,默認8
set softtabstop=4 " softtabstop 表示在編輯模式的時候按退格鍵的時候退回縮進的長度,當使用 expandtab 時特別有用
set expandtab " 當設置成 expandtab 時,縮進用空格來表示,noexpandtab 則是用製表符表示一個縮進
set autoindent " 自動縮進
set cindent " 自動縮進補充
set shiftwidth=4 " 自動縮進空白字符個數
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"顯示肉眼不可見字符
"顯示換行爲$符號
set list
"table顯示爲>---
set listchars=tab:>-
"高亮顯示行尾空格
highlight WhitespaceEOL ctermbg=red guibg=red
match WhitespaceEOL /\s\+$/
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"通用設置
set cursorline " 突出顯示當前行
set syntax=on " 語法高亮
set scrolloff=15 " 光標上移下移時,始終預留 x 行空格到頂部或底部
set nu " 顯示行號
"set rnu " 使用相對行號
set history=1000 " 歷史記錄數
set showmatch " 高亮顯示匹配的括號
set hlsearch " 搜索逐字符高亮
2、vim含基礎功能與插件等功能配置 .vimrc(有插件)
備註:
該vimrc文件需要先安裝插件,否則使用vim打開文件時會大量報錯。
插件安裝方法見另一篇博客:【vim常用插件安裝&使用方法(一步一步配置VIM開發環境)】。
先上一張效果圖:
.vimrc文件內容如下:
""""""""""""""""""""""""""""""""""""""""""""""""
"編碼、語言設置
set enc=utf-8
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
set langmenu=zh_CN.UTF-8
""""""""""""""""""""""""""""""""""""""""""""""""
"代碼按照縮進收放
"zR:打開所有
"zM:收起所有
"zc:收起光標所在塊
"zo:打開光標所在塊
"za:光標所在的位置打開/收起狀態取反
"set foldmethod=indent
""""""""""""""""""""""""""""""""""""""""""""""""
"自動補全
":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
""""""""""""""""""""""""""""""""""""""""""""""""
"設置狀態行顯示常用信息
"%= 剩餘的內容向右對齊
"\ 轉義字符
set statusline=%F%=\ asc=%b\ hex=0x%B\ line=%l\[%p%%,%L]\ row=%v\ \ \ \ .
"設置laststatus = 0 ,不顯式狀態行
"設置laststatus = 1 ,僅當窗口多於一個時,顯示狀態行
"設置laststatus = 2 ,總是顯式狀態行
set laststatus=2
""""""""""""""""""""""""""""""""""""""""""""""""
" 在被分割的窗口間顯示空白,便於閱讀
set fillchars=vert:\ ,stl:\ ,stlnc:\
""""""""""""""""""""""""""""""""""""""""""""""""
"重映射實際行和屏幕行
nnoremap k gk
nnoremap j gj
nnoremap gj j
nnoremap gk k
""""""""""""""""""""""""""""""""""""""""""""""""
"TAB
"空格代替Tab"
"注意: 插入模式下輸入【ctrl+v+i】可以強制輸入一個tab
set tabstop=4 " tabstop 表示一個 tab 顯示出來是多少個空格的長度,默認8
set softtabstop=4 " softtabstop 表示在編輯模式的時候按退格鍵的時候退回縮進的長度,當使用 expandtab 時特別有用
set expandtab " 當設置成 expandtab 時,縮進用空格來表示,noexpandtab 則是用製表符表示一個縮進
set autoindent " 自動縮進
set cindent " 自動縮進補充
set shiftwidth=4 " 自動縮進空白字符個數
""""""""""""""""""""""""""""""""""""""""""""""""
"顯示肉眼不可見字符
"顯示換行爲$符號
set list
"table顯示爲>---
set listchars=tab:>-
"高亮顯示行尾空格
highlight WhitespaceEOL ctermbg=red guibg=red
match WhitespaceEOL /\s\+$/
""""""""""""""""""""""""""""""""""""""""""""""""
"通用設置
set cursorline " 突出顯示當前行
set syntax=on " 語法高亮
set scrolloff=15 " 光標上移下移時,始終預留 x 行空格到頂部或底部
set nu " 顯示行號
"set rnu " 使用相對行號
set history=1000 " 歷史記錄數
set showmatch " 高亮顯示匹配的括號
set hlsearch " 搜索逐字符高亮
""""""""""""""""""""""""""""""""""""""""""""""""
""快捷鍵F4,添加文件頭註釋,以及版權聲明
map <F4> :call TitleDet()<cr>'s
function AddTitle()
"call append( 0, "/* COPYRIGHT NOTICE")
call append( 0, "\/* 版權聲明")
call append( 1, " * 功能 :")
call append( 2, " * 作者 :lsy")
call append( 3, " * 文件路徑 : ".expand("%:p:h")."/".expand("%:t"))
call append( 4, " * 創建時間 :".strftime("%Y/%m/%d %H:%M"))
call append( 5, " *\/")
call append( 6, "")
echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endfunction
"更新最近修改時間和文件名
function UpdateTitle()
normal m'
execute '/# @date /s@:.*$@\=strftime(":%Y-%m-%d %H:%M")@'
normal ''
normal mk
execute '/# @file /s@:.*$@\=":".expand("%:p:h")."\\".expand("%:t")@'
execute "noh"
normal 'k
echohl WarningMsg | echo "Successful in updating the copy right." | echohl None
endfunction
"判斷前10行代碼裏面,是否有COPYRIGHT NOTICE這個單詞,
"如果沒有的話,代表沒有添加過作者信息,需要新添加;
"如果有的話,那麼只需要更新即可
function TitleDet()
let n = 1
"默認爲添加
let line = getline(n)
"let str = '^/\* COPYRIGHT NOTICE$'
let str = '^/\* 版權聲明$'
if line =~ str
call UpdateTitle()
return
endif
call AddTitle()
endfunction
""""""""""""""""""""""""""""""""""""""""""""""""""
""快捷鍵F5,生成main函數模板
map <F5> :call TitleDet_main()<cr>'s
function AddTitle_main()
"call append( 0, "/* COPYRIGHT NOTICE")
call append( 0, "\/* 版權聲明")
call append( 1, " * 功能 :")
call append( 2, " * 作者 :lsy")
call append( 3, " * 文件路徑 : ".expand("%:p:h")."/".expand("%:t"))
call append( 4, " * 創建時間 :".strftime("%Y/%m/%d %H:%M"))
call append( 5, " *\/")
call append( 6, "")
call append( 7, "#include <stdio.h>")
call append( 8, "#include <string.h>")
call append( 9, "")
call append(10, "int main(int argc, char *argv[]) {")
call append(11, "")
call append(12, " return 0;")
call append(13, "}")
echohl WarningMsg | echo "Successful in adding the main function." | echohl None
endfunction
"更新最近修改時間和文件名
function UpdateTitle_main()
normal m'
execute '/# @date /s@:.*$@\=strftime(":%Y-%m-%d %H:%M")@'
normal ''
normal mk
execute '/# @file /s@:.*$@\=":".expand("%:p:h")."\\".expand("%:t")@'
execute "noh"
normal 'k
echohl WarningMsg | echo "Successful in updating the main function." | echohl None
endfunction
"判斷前10行代碼裏面,是否有COPYRIGHT NOTICE這個單詞,
"如果沒有的話,代表沒有添加過作者信息,需要新添加;
"如果有的話,那麼只需要更新即可
function TitleDet_main()
let n = 1
"默認爲添加
let line = getline(n)
"let str = '^/\* COPYRIGHT NOTICE$'
let str = '^/\* 版權聲明$'
if line =~ str
call UpdateTitle_main()
return
endif
call AddTitle_main()
endfunction
""""""""""""""""""""""""""""""""""""""""""""""""""
""快捷鍵F6,生成.h文件模板
map <F6> :call TitleDet_h()<cr>'s
function AddTitle_h()
"call append( 0, "/* COPYRIGHT NOTICE")
call append( 0, "\/* 版權聲明")
call append( 1, " * 功能 :")
call append( 2, " * 作者 :lsy")
call append( 3, " * 文件路徑 : ".expand("%:p:h")."/".expand("%:t"))
call append( 4, " * 創建時間 :".strftime("%Y/%m/%d %H:%M"))
call append( 5, " *\/")
call append( 6, "")
call append( 7, "#ifndef ")
call append( 8, "#define ")
call append( 9, "")
call append(10, "")
call append(11, "")
call append(12, "#endif")
echohl WarningMsg | echo "Successful in adding the .h file." | echohl None
endfunction
"更新最近修改時間和文件名
function UpdateTitle_h()
normal m'
execute '/# @date /s@:.*$@\=strftime(":%Y-%m-%d %H:%M")@'
normal ''
normal mk
execute '/# @file /s@:.*$@\=":".expand("%:p:h")."\\".expand("%:t")@'
execute "noh"
normal 'k
echohl WarningMsg | echo "Successful in updating the .h file." | echohl None
endfunction
"判斷前10行代碼裏面,是否有COPYRIGHT NOTICE這個單詞,
"如果沒有的話,代表沒有添加過作者信息,需要新添加;
"如果有的話,那麼只需要更新即可
function TitleDet_h()
let n = 1
"默認爲添加
let line = getline(n)
"let str = '^/\* COPYRIGHT NOTICE$'
let str = '^/\* 版權聲明$'
if line =~ str
call UpdateTitle_h()
return
endif
call AddTitle_h()
endfunction
""""""""""""""""""taglist 設置""""""""""""""""""
"let Tlist_Auto_Open = 1 "進入vim時自動打開插件
let Tlist_Ctags_Cmd = "/usr/bin/ctags"
let Tlist_Show_One_File = 1
let Tlist_Exit_OnlyWindow = 1
set tags=tags
""""""""""""""""""配置WinManager""""""""""""""""""
let g:winManagerWindowLayout='FileExplorer|TagList'
"設置打開WinManager插件快捷鍵爲F8"
nmap <silent> <F8> :WMToggle<cr><C>wl
"進入vim時自動打開插件
let g:AutoOpenWinManager = 1
"設置winmanager的寬度,默認爲25"
let g:winManagerWidth = 30
"自動退出Winmanager
""autocmd bufenter * if ((winnr("$") == 2) && (exists("b:NERDTreeType")) && (b:NERDTreeType == "primary")) | qa | endif
autocmd bufenter * if ((winnr("$") == 3) && (exists("b:NERDTreeType"))) | qa | endif
""""""""""""""""""""""""""""""""""""""""""""""""
"""""""Powerline"""""""
set rtp+=/home/lsy/.local/lib/python2.7/site-packages/powerline/bindings/vim
"These lines setup the environment to show graphics and colors correctly.
set nocompatible
set t_Co=256
let g:minBufExplForceSyntaxEnable = 1
if ! has('gui_running')
set ttimeoutlen=10
augroup FastEscape
autocmd!
au InsertEnter * set timeoutlen=0
au InsertLeave * set timeoutlen=1000
augroup END
endif
set laststatus=2 " Always display the statusline in all windows
set guifont=Inconsolata\ for\ Powerline:h14
set noshowmode " Hide the default mode text (e.g. -- INSERT -- below the statusline)
"字體補丁
let laststatus = 2
"使用powerline打過補丁的字體"
let g:airline_powerline_fonts = 1
let g:Powerline_symbols='fancy'