" ----------------- Author: Ruchee
" ----------------- Email: my@ruchee.com
" ----------------- WebSite: http://www.ruchee.com
" ----------------- Date: 2012-05-01php
" 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 --一步加載語法模板和做者、時間信息css
" <C-P> --單詞補全
" <C-X><C-L> --整行補全
" Tab鍵 --插入模式下的全功能語法結構補全 [snipMate插件]
" Shift + Insert --向Vim中粘貼從別處複製的內容html
" u [小寫] --單步復原 [非插入模式]
" U [大寫] --整行復原 [非插入模式]java
" jj --保存文件並留在插入模式 [插入模式]
" kk --返回Normal模式 [插入模式]
" nt --打開NERDTree [非插入模式]
" tl --打開TagList [非插入模式]python
" za --打開或關閉當前摺疊
" zM --關閉全部摺疊
" zR --打開全部摺疊c++
" :set syntax=cpp --手動選擇語法高亮 [或 :set filetype=cpp]django
" :%!xxd --轉儲二進制文件,以十六進制形式顯示
" :%!xxd -r --還原二進制文件vim
" ---------- 主要插件詳細用法說明 ---------------------瀏覽器
" :Tlist --呼出變量和函數列表 [TagList插件]
" :LoadTemplate --呼出語法模板 [Load_Template插件]
" :AuthorInfoDetect --添加做者、時間等信息 [NERD_commenter && authorinfo插件]ruby
" ---------- 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 htmldjango
colorscheme desert " 着色模式:藍色背景
"set guifont=Monaco:h10 " 字體 && 字號
set guifont=Courier_New:h13:cANSI "我喜歡的字體
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 " 查找book時,當輸入/b時會自動找到
set hlsearch " 開啓高亮顯示結果
set incsearch " 開啓實時搜索功能
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欄
endif
set writebackup " 設置無備份文件
set nobackup
set 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-8
set encoding=utf-8
set fileencodings=utf-8,gbk,cp936,latin-1
" 解決菜單亂碼
source $VIMRUNTIME/delmenu.vim
source $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>i
function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
" MiniBufExplorer 多個文件切換 可以使用鼠標雙擊相應文件名進行切換
let g:miniBufExplMapWindowNavVim=1
let g:miniBufExplMapWindowNavArrows=1
let g:miniBufExplMapCTabSwitchBufs=1
let g:miniBufExplModSelTarget=1
" :Tlist 調用TagList
let Tlist_Show_One_File=1 " 只顯示當前文件的tags
let Tlist_Exit_OnlyWindow=1 " 若是Taglist窗口是最後一個窗口則退出Vim
let 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>Gi
imap <c-e> <ESC>:LoadTemplate<CR><ESC>:AuthorInfoDetect<CR><ESC>Gi
vmap <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"
endif
endfunc
" 運行可執行文件
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"
endif
endfunc
" 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>
"設置標籤欄的顯示,0永遠不顯示 1兩個以上顯示 2 永遠顯示set showtabline=2