原文連結:http://www.oschina.net/code/snippet_103341_9644
Linux:
" ----------------- Author: Ruchee" ----------------- Email: my@ruchee.com" ----------------- WebSite: http://www.ruchee.com" ----------------- Date: 2012-05-01" Ctrl + H --游標移當前行行首" Ctrl + J --游標移下一行行首" Ctrl + K --游標移上一行行尾" Ctrl + L --游標移當前行行尾" Ctrl + C --編譯 [支援C/C++、Java、Haskell]" Ctrl + R --運行 [支援C/C++、Java、Haskell、Lua、Perl、Python、Ruby]" Ctrl + ] --轉到函數定義" Ctrl + T --返回調用函數" Ctrl + E --一步載入文法模板和作者、時間資訊" <C-P> --單詞補全" <C-X><C-L> --整行補全" Tab鍵 --插入模式下的全功能文法結構補全 [snipMate外掛程式]" Shift + Insert --向Vim中粘貼從別處複製的內容" u [小寫] --單步複原 [非插入模式]" U [大寫] --整行複原 [非插入模式]" jj --儲存檔案並留在插入模式 [插入模式]" kk --返回Normal模式 [插入模式]" nt --開啟NERDTree [非插入模式]" tl --開啟TagList [非插入模式]" za --開啟或關閉當前摺疊" zM --關閉所有摺疊" zR --開啟所有摺疊" :set syntax=cpp --手動選擇文法高亮 [或 :set filetype=cpp]" :%!xxd --轉儲二進位檔案,以十六進位形式顯示" :%!xxd -r --還原二進位檔案" ---------- 主要外掛程式詳細用法說明 ---------------------" :Tlist --呼出變數和函數列表 [TagList外掛程式]" :LoadTemplate --呼出文法模板 [Load_Template外掛程式]" :AuthorInfoDetect --添加作者、時間等資訊 [NERD_commenter && authorinfo外掛程式]" ---------- a.vim [自動切換C/C++同名標頭檔] ----------"" :A --切換同名標頭檔並獨佔整個螢幕" :AS --切換同名標頭檔並垂直分屏,標頭檔在上" :AV --切換同名標頭檔並水平分割,標頭檔在左" ---------- NERDTree [智慧型檔案瀏覽器] ----------------"" :NERDTree --啟動NERDTree外掛程式" o [小寫] --切換當前檔案或目錄的開啟、關閉狀態" u --開啟上層目錄" p [小寫] --返回上層目錄" P [大寫] --返回根目錄" K --轉到目前的目錄第一個節點" J --轉到目前的目錄最後的節點" m --顯示檔案系統菜單 [增、刪、移]" ? --彈出協助菜單" q --退出該外掛程式" 將所有以.html結尾的文檔以Django Template文法進行渲染" 本配置語句必須放在所有配置的最前面au BufNewFile,BufRead *.html setf htmldjangocolorscheme elflord " 著色模式set guifont=Monaco:h10 " 字型 && 字型大小set tabstop=4 " 設定tab鍵的寬度set shiftwidth=4 " 換行時行間交錯使用4個空格set autoindent " 自動對齊set backspace=2 " 設定退格鍵可用set cindent shiftwidth=4 " 自動縮排4空格set smartindent " 智能自動縮排set ai! " 設定自動縮排set nu! " 顯示行號"set showmatch " 顯示括弧配對情況set mouse=a " 啟用滑鼠set ruler " 右下角顯示光線標位置的狀態行set incsearch " 開啟即時搜尋功能set hlsearch " 開啟高亮顯示結果set nowrapscan " 搜尋到檔案兩端時不重新搜尋set nocompatible " 關閉相容模式set vb t_vb= " 關閉提示音"set cursorline " 反白當前行set hidden " 允許在有未儲存的修改時切換緩衝區set list " 顯示Tab符,使用一高亮豎線代替set listchars=tab:\|\ ,syntax enable " 開啟文法高亮syntax on " 開啟檔案類型偵測filetype indent on " 針對不同的檔案類型採用不同的縮排格式filetype plugin on " 針對不同的檔案類型載入對應的外掛程式filetype plugin indent on " 啟用自動補全set writebackup " 設定無備份檔案set nobackupset autochdir " 設定檔案瀏覽器目錄為目前的目錄"set nowrap " 設定不自動換行set foldmethod=syntax " 選擇程式碼摺疊功能類型set foldlevel=100 " 禁止自動摺疊set laststatus=2 " 開啟狀態列資訊set cmdheight=2 " 命令列的高度,預設為1,這裡設為2" 每行超過80個的字元用底線標示au BufRead,BufNewFile *.s,*.asm,*.h,*.c,*.cpp,*.cc,*.java,*.cs,*.erl,*.hs,*.sh,*.lua,*.pl,*.pm,*.php,*.py,*.rb,*.erb,*.vim,*.js,*.css,*.xml,*.html,*.xhtml 2match Underlined /.\%81v/" 設定編碼set fenc=utf-8set encoding=utf-8set fileencodings=utf-8,gbk,cp936,latin-1" For Haskell:let hs_highlight_delimiters=1 " 高亮定界符:let hs_highlight_boolean=1 " 把True和False識別為關鍵字:let hs_highlight_types=1 " 把基本類型的名字識別為關鍵字:let hs_highlight_more_types=1 " 把更多常用類型識別為關鍵字:let hs_highlight_debug=1 " 高亮調試函數的名字:let hs_allow_hash_operator=1 " 阻止把#高亮為錯誤" ======= 引號 && 括弧自動匹配 ======= ":inoremap ( ()<ESC>i:inoremap ) <c-r>=ClosePair(')')<CR>:inoremap { {}<ESC>i:inoremap } <c-r>=ClosePair('}')<CR>:inoremap [ []<ESC>i:inoremap ] <c-r>=ClosePair(']')<CR>":inoremap < <><ESC>i":inoremap > <c-r>=ClosePair('>')<CR>:inoremap " ""<ESC>i:inoremap ' ''<ESC>i:inoremap ` ``<ESC>ifunction ClosePair(char) if getline('.')[col('.') - 1] == a:char return "\<Right>" else return a:char endifendf" MiniBufExplorer 多個檔案切換 可使用滑鼠雙擊相應檔案名稱進行切換let g:miniBufExplMapWindowNavVim=1let g:miniBufExplMapWindowNavArrows=1let g:miniBufExplMapCTabSwitchBufs=1let g:miniBufExplModSelTarget=1" :Tlist 調用TagListlet Tlist_Show_One_File=1 " 只顯示當前檔案的tagslet Tlist_Exit_OnlyWindow=1 " 如果Taglist視窗是最後一個視窗則退出Vimlet Tlist_Use_Right_Window=1 " 在右側視窗中顯示let Tlist_File_Fold_Auto_Close=1 " 自動摺疊" TxtBrowser 高亮TXT文字檔au BufRead,BufNewFile *.txt setlocal ft=txt" :LoadTemplate 根據檔案尾碼自動載入模板let g:template_path='/home/ruchee/.vim/template/'" :AuthorInfoDetect 自動添加作者、時間等資訊,本質是NERD_commenter && authorinfo的結合let g:vimrc_author='Ruchee'let g:vimrc_email='my@ruchee.com'let g:vimrc_homepage='http://www.ruchee.com'" Ctrl + H 將游標移到當前行的行首imap <c-h> <ESC>I" Ctrl + J 將游標移到下一行的行首imap <c-j> <ESC>jI" Ctrl + K 將游標移到上一行的末尾imap <c-k> <ESC>kA" Ctrl + L 將游標移到當前行的行尾imap <c-l> <ESC>A" Ctrl + E 一步載入文法模板和作者、時間資訊map <c-e> <ESC>:LoadTemplate<CR><ESC>:AuthorInfoDetect<CR><ESC>Giimap <c-e> <ESC>:LoadTemplate<CR><ESC>:AuthorInfoDetect<CR><ESC>Givmap <c-e> <ESC>:LoadTemplate<CR><ESC>:AuthorInfoDetect<CR><ESC>Gi" jj 儲存檔案並留在插入模式 [插入模式]imap jj <ESC>:w<CR>li" kk 返回Normal模式 [插入模式]imap kk <ESC>l" nt 開啟NERDTree [非插入模式]map nt :NERDTree<CR>" tl 開啟Taglist [非插入模式]map tl :Tlist<CR><c-l>" ======= 編譯 && 運行 ======= "" 編譯源檔案func! CompileCode() exec "w" if &filetype == "c" exec "!gcc -Wall -std=c99 %<.c -o %<" elseif &filetype == "cpp" exec "!g++ -Wall -std=c++98 %<.cpp -o %<" elseif &filetype == "java" exec "!javac %<.java" elseif &filetype == "haskell" exec "!ghc --make %<.hs -o %<" elseif &filetype == "lua" exec "!lua %<.lua" elseif &filetype == "perl" exec "!perl %<.pl" elseif &filetype == "python" exec "!python %<.py" elseif &filetype == "ruby" exec "!ruby %<.rb" endifendfunc" 運行可執行檔func! RunCode() exec "w" if &filetype == "c" || &filetype == "cpp" || &filetype == "haskell" exec "! ./%<" elseif &filetype == "java" exec "!java %<" elseif &filetype == "lua" exec "!lua %<.lua" elseif &filetype == "perl" exec "!perl %<.pl" elseif &filetype == "python" exec "!python %<.py" elseif &filetype == "ruby" exec "!ruby %<.rb" endifendfunc" Ctrl + C 一鍵儲存、編譯map <c-c> :call CompileCode()<CR>imap <c-c> <ESC>:call CompileCode()<CR>vmap <c-c> <ESC>:call CompileCode()<CR>" Ctrl + R 一鍵儲存、運行map <c-r> :call RunCode()<CR>imap <c-r> <ESC>:call RunCode()<CR>vmap <c-r> <ESC>:call RunCode()<CR>
Winodws:
" ----------------- Author: Ruchee" ----------------- Email: my@ruchee.com" ----------------- WebSite: http://www.ruchee.com" ----------------- Date: 2012-05-01" Ctrl + H --游標移當前行行首" Ctrl + J --游標移下一行行首" Ctrl + K --游標移上一行行尾" Ctrl + L --游標移當前行行尾" Ctrl + C --編譯 [支援C/C++、Java、Haskll]" Ctrl + R --運行 [支援C/C++、Java、Haskell、Lua、Perl、Python、Ruby]" Ctrl + ] --轉到函數定義" Ctrl + T --返回調用函數" Ctrl + E --一步載入文法模板和作者、時間資訊" <C-P> --單詞補全" <C-X><C-L> --整行補全" Tab鍵 --插入模式下的全功能文法結構補全 [snipMate外掛程式]" Shift + Insert --向Vim中粘貼從別處複製的內容" u [小寫] --單步複原 [非插入模式]" U [大寫] --整行複原 [非插入模式]" jj --儲存檔案並留在插入模式 [插入模式]" kk --返回Normal模式 [插入模式]" nt --開啟NERDTree [非插入模式]" tl --開啟TagList [非插入模式]" za --開啟或關閉當前摺疊" zM --關閉所有摺疊" zR --開啟所有摺疊" :set syntax=cpp --手動選擇文法高亮 [或 :set filetype=cpp]" :%!xxd --轉儲二進位檔案,以十六進位形式顯示" :%!xxd -r --還原二進位檔案" ---------- 主要外掛程式詳細用法說明 ---------------------" :Tlist --呼出變數和函數列表 [TagList外掛程式]" :LoadTemplate --呼出文法模板 [Load_Template外掛程式]" :AuthorInfoDetect --添加作者、時間等資訊 [NERD_commenter && authorinfo外掛程式]" ---------- a.vim [自動切換C/C++同名標頭檔] ----------"" :A --切換同名標頭檔並獨佔整個螢幕" :AS --切換同名標頭檔並垂直分屏,標頭檔在上" :AV --切換同名標頭檔並水平分割,標頭檔在左" ---------- mark.vim [追蹤高亮指定關鍵字] ------------"" \m --normal模式下,在想要高亮的單詞上面敲擊\m即可高亮或取消高亮該單詞" :Mark --取消所有高亮" :Mark abc --指定高亮單詞 abc 或取消高亮 abc" ---------- NERDTree [智慧型檔案瀏覽器] ----------------"" :NERDTree --啟動NERDTree外掛程式" o [小寫] --切換當前檔案或目錄的開啟、關閉狀態" u --開啟上層目錄" p [小寫] --返回上層目錄" P [大寫] --返回根目錄" K --轉到目前的目錄第一個節點" J --轉到目前的目錄最後的節點" m --顯示檔案系統菜單 [增、刪、移]" ? --彈出協助菜單" q --退出該外掛程式" 將所有以.html結尾的文檔以Django Template文法進行渲染" 本配置語句必須放在所有配置的最前面au BufNewFile,BufRead *.html setf htmldjangocolorscheme blackboard " 著色模式:藍色背景set guifont=Monaco:h10 " 字型 && 字型大小set tabstop=4 " 設定tab鍵的寬度set shiftwidth=4 " 換行時行間交錯使用4個空格set autoindent " 自動對齊set backspace=2 " 設定退格鍵可用set cindent shiftwidth=4 " 自動縮排4空格set smartindent " 智能自動縮排set ai! " 設定自動縮排set nu! " 顯示行號"set showmatch " 顯示括弧配對情況set mouse=a " 啟用滑鼠set ruler " 右下角顯示光線標位置的狀態行set incsearch " 開啟即時搜尋功能set hlsearch " 開啟高亮顯示結果set nowrapscan " 搜尋到檔案兩端時不重新搜尋set nocompatible " 關閉相容模式set vb t_vb= " 關閉提示音"set cursorline " 反白當前行set hidden " 允許在有未儲存的修改時切換緩衝區set list " 顯示Tab符,使用一高亮豎線代替set listchars=tab:\|\ ,syntax enable " 開啟文法高亮syntax on " 開啟檔案類型偵測filetype indent on " 針對不同的檔案類型採用不同的縮排格式filetype plugin on " 針對不同的檔案類型載入對應的外掛程式filetype plugin indent on " 啟用自動補全if has("gui_running") au GUIEnter * simalt ~x " 視窗啟動時自動最大化 "winpos 20 20 " 指定視窗出現的位置,座標原點在螢幕左上方 "set lines=20 columns=90 " 指定視窗大小,lines為高度,columns為寬度 "set guioptions-=m " 隱藏功能表列 "set guioptions-=T " 隱藏工具列 "set guioptions-=L " 隱藏左側捲軸 "set guioptions-=r " 隱藏右側捲軸 "set guioptions-=b " 隱藏底部捲軸 "set showtabline=0 " 隱藏Tab欄endifset writebackup " 設定無備份檔案set nobackupset autochdir " 設定檔案瀏覽器目錄為目前的目錄"set nowrap " 設定不自動換行set foldmethod=syntax " 選擇程式碼摺疊功能類型set foldlevel=100 " 禁止自動摺疊set laststatus=2 " 開啟狀態列資訊set cmdheight=2 " 命令列的高度,預設為1,這裡設為2" 每行超過80個的字元用底線標示au BufRead,BufNewFile *.s,*.asm,*.h,*.c,*.cpp,*.cc,*.java,*.cs,*.erl,*.hs,*.sh,*.lua,*.pl,*.pm,*.php,*.py,*.rb,*.erb,*.vim,*.js,*.css,*.xml,*.html,*.xhtml 2match Underlined /.\%81v/" 設定編碼set fenc=utf-8set encoding=utf-8set fileencodings=utf-8,gbk,cp936,latin-1" 解決菜單亂碼source $VIMRUNTIME/delmenu.vimsource $VIMRUNTIME/menu.vim" 解決consle輸出亂碼language messages zh_CN.utf-8" For Haskell:let hs_highlight_delimiters=1 " 高亮定界符:let hs_highlight_boolean=1 " 把True和False識別為關鍵字:let hs_highlight_types=1 " 把基本類型的名字識別為關鍵字:let hs_highlight_more_types=1 " 把更多常用類型識別為關鍵字:let hs_highlight_debug=1 " 高亮調試函數的名字:let hs_allow_hash_operator=1 " 阻止把#高亮為錯誤" ======= 引號 && 括弧自動匹配 ======= ":inoremap ( ()<ESC>i:inoremap ) <c-r>=ClosePair(')')<CR>:inoremap { {}<ESC>i:inoremap } <c-r>=ClosePair('}')<CR>:inoremap [ []<ESC>i:inoremap ] <c-r>=ClosePair(']')<CR>":inoremap < <><ESC>i":inoremap > <c-r>=ClosePair('>')<CR>:inoremap " ""<ESC>i:inoremap ' ''<ESC>i:inoremap ` ``<ESC>ifunction ClosePair(char) if getline('.')[col('.') - 1] == a:char return "\<Right>" else return a:char endifendf" MiniBufExplorer 多個檔案切換 可使用滑鼠雙擊相應檔案名稱進行切換let g:miniBufExplMapWindowNavVim=1let g:miniBufExplMapWindowNavArrows=1let g:miniBufExplMapCTabSwitchBufs=1let g:miniBufExplModSelTarget=1" :Tlist 調用TagListlet Tlist_Show_One_File=1 " 只顯示當前檔案的tagslet Tlist_Exit_OnlyWindow=1 " 如果Taglist視窗是最後一個視窗則退出Vimlet Tlist_Use_Right_Window=1 " 在右側視窗中顯示let Tlist_File_Fold_Auto_Close=1 " 自動摺疊" TxtBrowser 高亮TXT文字檔au BufRead,BufNewFile *.txt setlocal ft=txt" :LoadTemplate 根據檔案尾碼自動載入模板let g:template_path='D:/Apps/Gvim/vimfiles/template/'" :AuthorInfoDetect 自動添加作者、時間等資訊,本質是NERD_commenter && authorinfo的結合let g:vimrc_author='Ruchee'let g:vimrc_email='my@ruchee.com'let g:vimrc_homepage='http://www.ruchee.com'" Ctrl + H 將游標移到當前行的行首imap <c-h> <ESC>I" Ctrl + J 將游標移到下一行的行首imap <c-j> <ESC>jI" Ctrl + K 將游標移到上一行的末尾imap <c-k> <ESC>kA" Ctrl + L 將游標移到當前行的行尾imap <c-l> <ESC>A" Ctrl + E 一步載入文法模板和作者、時間資訊map <c-e> <ESC>:LoadTemplate<CR><ESC>:AuthorInfoDetect<CR><ESC>Giimap <c-e> <ESC>:LoadTemplate<CR><ESC>:AuthorInfoDetect<CR><ESC>Givmap <c-e> <ESC>:LoadTemplate<CR><ESC>:AuthorInfoDetect<CR><ESC>Gi" jj 儲存檔案並留在插入模式 [插入模式]imap jj <ESC>:w<CR>li" kk 返回Normal模式 [插入模式]imap kk <ESC>l" nt 開啟NERDTree [非插入模式]map nt :NERDTree<CR>" tl 開啟Taglist [非插入模式]map tl :Tlist<CR><c-l>" ======= 編譯 && 運行 ======= "" 編譯源檔案func! CompileCode() exec "w" if &filetype == "c" exec "!gcc -Wall -std=c99 %<.c -o %<" elseif &filetype == "cpp" exec "!g++ -Wall -std=c++98 %<.cpp -o %<" elseif &filetype == "java" exec "!javac %<.java" elseif &filetype == "haskell" exec "!ghc --make %<.hs -o %<" elseif &filetype == "lua" exec "!lua %<.lua" elseif &filetype == "perl" exec "!perl %<.pl" elseif &filetype == "python" exec "!python %<.py" elseif &filetype == "ruby" exec "!ruby %<.rb" endifendfunc" 運行可執行檔func! RunCode() exec "w" if &filetype == "c" || &filetype == "cpp" || &filetype == "haskell" exec "! %<.exe" elseif &filetype == "java" exec "!java %<" elseif &filetype == "lua" exec "!lua %<.lua" elseif &filetype == "perl" exec "!perl %<.pl" elseif &filetype == "python" exec "!python %<.py" elseif &filetype == "ruby" exec "!ruby %<.rb" endifendfunc" Ctrl + C 一鍵儲存、編譯map <c-c> :call CompileCode()<CR>imap <c-c> <ESC>:call CompileCode()<CR>vmap <c-c> <ESC>:call CompileCode()<CR>" Ctrl + R 一鍵儲存、運行map <c-r> :call RunCode()<CR>imap <c-r> <ESC>:call RunCode()<CR>vmap <c-r> <ESC>:call RunCode()<CR>
另附以上兩個設定檔:
http://www.ruchee.com/download/Vim2012-04-01.7z
感謝作者