基本c++
h j k l
詞vim
b 向前移動,光標停在第一個字符 (backward) w 向後移動,光標停在第一個字符 (word) e 向後移動,光標停在最後一個字符 (end of word)
行首或行尾windows
$ 移動到行尾 ^ 移動到行首,非空白字符 0 移動到行首,第一個字符
指定字符session
f 單行搜索下一個單個字符 (find) F 單行搜索上一個單個字符 t 單行搜索下一個單個字符,光標停在前一個字符 (to) T 單行搜索上一個單個字符,光標停在前一個字符
匹配括號函數
% 移動到匹配的括號或移動到括號
移動到指定行字體
G 移動到最後一行 33G 移動到第 33行 gg 移動到第一行 40% 移動到40% H 移動到屏幕內第一行 (home) M 移動到屏幕內中間 (middle) L 移動到屏幕內最後一行 (last)
滾屏ui
<c-u> 向上滾動半屏 (up) <c-d> 向下滾動半屏 (down) <c-f> 向下滾動一屏 (forward) <c-b> 向上滾動一屏 (backward)
簡單查找編碼
/string 向下查找包含 string的詞 ?string 向上查找包含 string的詞 /\<string\> 向下查找 string ?\<string\> 向上查找 string n 重複前一次查找 N 重複前一次相反的查找 /<up> 以前的查找 * 向下查找光標所在處的詞,全詞匹配 # 向上查找光標所在處的詞,全詞匹配 g* 向下查找包含光標所在處的詞 g# 向上查找包含光標所在處的詞
標記:spa
m{mark} 講此處標記爲 mark,mark 爲一個字母 `{mark} 跳到標記 mark處,` 是1左邊那個鍵 '{mark} 跳到標記 mark處所在行行首,'是單引號 特殊的mark ' 這次跳轉以前的起跳點 " 上次編輯該文件時光標最後停留的位置 [ 最後一次修改的起始位置 ] 最後一次修改的結束位置
其餘命令插件
:set number 顯示行號,左邊 (se nu) :set nonumber 不顯示行號(se nonu) :set ruler 顯示光標位置,右下角 (se ru) :set noruler 不顯示光標位置 (se noru) :set ignorecase 查找忽略大小寫 :set noignorecase 查找不忽略大小寫 :set hlsearch 查找高亮 (se hls) :set nohlserch 關閉查找 (se nohls) :set incsearch 鍵入目標字符串時就開始查找 :set nowrapscan 搜索過程在文件結束時就中止
插入
i 在當前光標處插入 I 在當前行第一個非空白字符前插入 a 在當前光標以後插入 A 在當前行尾插入 o 在當前行之下插入 O 在當前行之上插入
刪除
d 刪除操做符 (delete) c 修改操做符,刪除以後自動進入插入 (change) dd 刪除一行 cc 修改一行 x dl ,刪除光標處字符 X dh ,刪除光標左邊的字符 D d$ ,刪除到行尾 C c$ ,修改到行尾 s cl ,修改光標字符 S cc ,修改一整行 r 替換(刪除以後插入並回到 Normal) . 執行上一次所執行的更改命令
複製
y 複製操做符 (yanking) yy 複製一行 yw 複製word,包含以後空白字符 ye 複製word,不包含以後空白字符 yaw 複製word,包含以後空白字符 yiw 複製word,不包含以後空白字符 yab 複製一個小括號裏面的內容,包括括號自己 yib 複製一個小括號裏面的內容,不包括括號自己 ya{ 複製一個大括號裏面的內容,包括括號自己 yi{ 複製一個大括號裏面的內容,不包括括號自己 p 粘貼(put)
對齊
= 對齊操做符 == 對齊一行 n== 對齊n行 =a{ 對齊一個大括號裏面的內容
大小寫替換
~ 大小寫替換 g~ 大小寫替換操做 g~iw 改變光標處單詞大小寫 guiw 光標處單詞變成小寫 gUiw 光標處單詞變成大寫
命令計數器 n+命令
一個命令重複執行 如:4x刪除 4個字符
操做命令符 +位移命令符
操做如:刪除 d,複製y ;位移如:詞語 w,$ 行尾 d$ 刪除到句尾 4yy 複製4行 3dw 3次刪除一個單詞 d3w 一次刪除 3個單詞 3d2w 3次刪除 2個單詞
經常使用刪除命令
x(dl), X(dh), D(d$), dw, db, diw, daw, dG, dgg
visual 模式(主要功能就是選擇)
v 進入visual模式,移動光標選擇操做文本範圍 V 進入visual行模式,選擇以行爲單位 <c-v> 進入visual塊模式,選擇塊
查找命令
/, ?, n, N, #, *, g#, g*, gd, gD
替換命令
:[n,m]s/[src]/[dst]/[g][c] [n,m] 表示一個範圍,從 n~m行中查找替換,[n,$]表示從第 n行以後 % 表示整個文件 [src] 要查找的詞, [dst]要替換的詞 [g] 替換全部的匹配,若沒有,只匹配第一個 [c] 替換前詢問 / 爲分隔符,也能夠用 +或# 來分隔 :s/src/dst/ 替換當前行第一個 src爲dst :s/src/dst/g 替換當前行全部 src爲dst :n,ms/src/dst/ 替換n~m行第一個 src爲dst :n,$s/src/dst/g 替換第n行到最後一行中全部 src爲dst :%s/src/dst/g 替換整個文件中全部 src爲dst :%s/src/dst/gc 替換整個文件中全部 src爲dst 並詢問是否替換 :%s/\<src\>/dst/gc 與:%s/src/dst/gc同樣(全詞匹配)
正則匹配
* 匹配0以上以前的字符 \+ 匹配1個以上以前字符 \= 匹配0個或 1個以前字符 \? 匹配0個或 1個以前字符 . 匹配任何單個字符 \< 匹配一個單詞的開始 \> 匹配一個單詞的結束 \s 匹配空白字符 <space>和<tab> \S 匹配非空白字符 \d 數字[0-9] \D 非數字[^0-9] \x 十六進制數字 [0-9A-Fa-f] \X 費十六進制數字 [^0-9A-Fa-f] \l 小寫字符 [a-z] \L 非小寫字符 [^a-z] \u 大寫字符 [A-Z] \U 非大寫字符 [^A-Z] \a 字符[A-Za-z] \A 非字符[^A-Za-z] [] 任何[]中的字符
更多
:help pattern
摺疊方式
manual 手工定義摺疊 indent 更多的縮進表示更高級的摺疊 expr 用表達式來定義摺疊 syntax 用語法高亮來定義摺疊 diff 對沒有更改的文本進行摺疊 marker 對文中的標誌摺疊 set foldmethod=**** 設置摺疊方式 marker方式,須要用標記來標識代碼的摺疊,系統默認是 {{{和}}}
摺疊命令
zc 摺疊 zC 對所在範圍內全部嵌套的摺疊點進行摺疊 zo 展開 zO 對所在範圍內全部嵌套的摺疊點展開 zr, zR 摺疊全部 zm, zM 展開全部 za, zA 摺疊/打開當前摺疊 zi 摺疊/展開全部 [z 到當前打開的摺疊開始處 ]z 到當前打開的摺疊末尾處 zj 向下移動到下一個摺疊開始處 zk 向上移動到前一折疊的結束處 zf 建立摺疊 zf56G 建立從當前行起到 56行的代碼摺疊 10zf 建立從當前行起後 10行的代碼摺疊 10zf- 建立從當前行起到以前 10行的代碼摺疊 zf% 建立從當前行起到對應匹配的括號 zd 刪除光標下的摺疊,僅當 manual或marker 方式有效 zD 嵌套地刪除光標下的摺疊,僅當 manual或marker 方式有效 zE 除去窗口裏的全部摺疊,僅當 manual或marker 方式有效
foldlevel
'foldlevel' 是個數值選項:數字越大則打開的摺疊更多 當 'foldlevel' 爲 0 時,全部的摺疊關閉 當 'foldlevel' 爲正數時,一些摺疊關閉 當 'foldlevel' 很大時,全部的摺疊打開 'foldlevel' 的改變後當即生效。以後,摺疊能夠被手動地打開和關閉
文件操做
:w 保存 :w! 強制保存 :w filename 將當前緩衝區的內容保存成文件 filename :n1, n2, filename 將n1到 n2的內容保存爲文件filename :q 退出當前窗口,若改動,提示失敗 :q! 強制退出,放棄改動 :wq 保存後退出 :wa 保存全部 :qa 退出全部 :wqa 保存全部後退出 ZZ 至關於:wq
編輯另外一個文件
:edit file
多文件編輯
vim filename1 filename2 ... :bn 跳轉至下一緩衝區 (文件)( 最後一個 ->第一個) :bN 跳轉到上一緩衝區 (文件)( 第一個->最後一個 ) :bd 關閉當前緩衝區 (文件) :n 跳轉至下一文件 ,如當前文件爲最後一個,提示錯誤 :N 跳轉至上一文件 ,如當前文件爲第一個,提示錯誤 :next, :previous 跳轉至下 /上一文件 :wnext, :wprevious 保存當前文件並跳轉至下 /上一文件 :last, :first 跳轉至最後一個 /第一個文件 :files 列出當前已打開文件 :args 給出進入 vim時命令行參數;當前正在編輯文件名用 "[]"列出
窗口分隔
<c-w>s 水平分割窗口 <c-w>v 垂直分割窗口 <c-w>w 切換至另外一窗口 <c-w>h 切換至左側窗口 <c-w>j 切換至下方窗口 <c-w>k 切換至上方窗口 <c-w>l 切換至右側窗口 <c-w>H 移動當前窗口到左邊 <c-w>J 移動當前窗口到下面 <c-w>K 移動當前窗口到上面 <c-w>L 移動當前窗口到右邊 :split filename 水平分隔窗口打開 filename :vsplit filename 垂直分割窗口打開 filename
標籤式編輯
:tabnew filename 在新標籤中打開 gt, :tabnext 切換至下一個標籤 gT, :tabprevious 切換至上一個標籤 :tabc 關閉當前標籤 :tabl 切換至最後一個標籤 :tabmove n 切換到第 n個標籤,默認標籤編號從 0開始
目錄
netrw 插件
netrw 插件是vim的標準插件,在 .vimrc中只要設置了 set nocp " 不與vi兼容 filetype plugin on " 容許插件 就可使用 netrw插件了
打開目錄
Ex[plore] 打開當前目錄或指定目錄 Se[xplore] 水平分割並打開當前目錄或指定目錄 Ve[xplore] 垂直分割並打開當前目錄或指定目錄 Te[xplore] 新建標籤並打開當前目錄或指定目錄
目錄操做
<cr> 進入目錄 <del> 試圖刪除文件 /目錄 - 上一級目錄 a 在正常顯示,隱藏和顯示三種方式間切換 c 使瀏覽中的目錄成爲當前目錄 d 創建目錄 D 試圖刪除目錄 i 在瘦、長、寬、和樹形的各類列表中切換 <c-l> 刷新目錄列表 o 打開新瀏覽窗口,進入光標所在目錄,使用水平分割 p 預覽文件 P 在前一次使用的窗口裏預覽 r 反轉排序順序 R 給指定文件 /目錄換名 s 選擇排序方式:按名字、時間、文件大小排序 S 指定按名字排序的後綴優先級 t 在新標籤頁裏打開光標所在文件 /目錄 v 打開新瀏覽窗口,進入光標所在目錄,使用垂直分割
建立宏
q + <register> + [一系列命令] + q <register> 指用戶自定義的 a-z中的一個寄存器 如:qa...q
運行宏
@ + <register> 運行寄存器中的宏 @@ 重複運行上一次宏 10@a 重複運行寄存器 a中的宏10 次
映射模式
普通模式 可視模式 操做符等待模式 插入模式 命令行模式
映射模式代號
<space> 普通、可視和選擇、操做符等待 n 普通 v 可視和選擇 s 選擇 x 可視 o 操做符等待 ! 插入和命令行 i 插入 l 插入、命令行和 Lang-Arg模式的":lmap" 映射 c 命令行
命令
map {lhs} {rhs} 把普通、可視和選擇、操做符等待模式下的 lhs命令映射成rhs,如:map tn :tabnew noremap noremap對rhs不會從新掃描映射 unmap {lhs} 取消對lhs的映射 mapclear 取消全部 map映射 nmap 只做用於普通模式下的映射 imap 只做用於插入模式下的映射 nnoremap 只做用於普通模式下的 noremap nunmap 只做用於普通模式下的 unmap nmapclear 只做用於普通模式下的 mapclear
特殊參數
<buffer>, <slient>, <special>, <script>, <expr>, <unique> <silent> 是指執行鍵綁定時不在命令行上回顯 <unique> 若是該映射或者縮寫已經存在,則該命令會失敗
mapleader
mapleader 變量對全部 map映射命令起效 它的做用是將參數 <leader>替換成mapleader 變量的值
鍵表
<k0>-<k9> 小鍵盤0-9 <s-c> shift + c <c-c> ctrl + c <m-c> alt + c 或 meta + c <a-c> 同<m-c> <t_xx> termcap 裏的"xx"入口鍵 <cr> 回車 <space> 空格 <tab> tab 鍵 <up> 方向鍵上 <down> 方向鍵下 <left> 方向鍵左 <right> 方向鍵右
基本用法
VIM 的diff模式是依賴於 diff命令
# vimdiff FILE_LEFT FILE_RIGHT # vim -d FILE_LEFT FILE_RIGHT
分割窗口啓動 diff
:diffsplit FILE_TOP 水平分割窗口比較文件 :vertical diffsplit FILE_RIGHT 垂直分割窗口比較文件
命令
]c 跳轉到下一差別點 [c 跳轉到上一差別點 dp, :diffput 把當前文件內容複製到另外一文件 do, :diffget 把另外一文件內容複製到當前文件 :diffupdate 刷新比較結果
session 和viminfo
session中保存了全部窗口的視圖和全局設置
viminfo中保存了命令行歷史、搜索字符串歷史、輸入行歷史、非空的寄存器內容、文件的位置標記、最近搜索 /替換的模式、緩衝區列表、全局變量等信息
session
:mksession [filename] 建立一個 session文件,省略文件名會自動建立一個名爲 Session.vim文件 :source [filename] 導入 session文件
'sessionoptions'選項記錄 session中保存的信息。缺省的'sessionoptions' 選項包括 "blank,buffers,curdir,folds,help,options,tabpages,winsize" ,意爲session文件會恢復當前編輯環境的空窗口、全部的緩衝區、當前目錄、摺疊相關的信息、幫助窗口、全部的選項和映射、全部的標籤頁、窗口大小。
若是你不但願在session中保存當前路徑,而是但願 session文件所在的目錄自動成爲當前工做目錄,那麼,須要在 'sessionoptions' 去掉'curdir' , 加入'sesdir' ,這樣每次載入 session文件時,這個文件所在的目錄,就被設爲 VIM的當前工做目錄。
viminfo
:wviminfo [filename] 手動建立一個viminfo文件 :rviminfo [filename] 導入viminfo 文件
在VIM退出時,每次都會保存一個 .viminfo文件在用戶的主目錄。'viminfo' 選項決定 ':wviminfo'命令保存哪些內容,以及保存的數目
命令
set expandtab 在插入時, <tab>鍵以必定數量的<space>代替 set tabstop=4 <tab> 被當作的 <space>的數量 set shiftwidth=4 每次縮進插入的 <space>的數量 set smarttab 在行前插入 <tab>根據shiftwidth 空格 set softtabstop=4 輸入tab 時插入<tab>和 <space>的混合 set list 顯示<tab>和行尾字符 $ set listchars=tab:>-,eol:$ <tab> 顯示爲>-,行尾顯示爲 $
替換爲
:set expandtab :retab! 或 :retab
加!處理全部的 ,若不加只處理行首的
替換爲
:set noexpandtab :retab! 或 :retab
encoding
set encoding=utf-8 set langmenu=zh_CN.UTF-8 language message zh_CN.UTF-8
encoding是 VIM內部使用的字符編碼方式, VIM內部全部的buffer 、寄存器、腳本中的字符串都使用這個編碼。 Vim 在工做的時候,若是編碼方式與它的內部編碼不一致,它會先把編碼轉換成內部編碼。若是工做用的編碼中含有沒法轉換爲內部編碼的字符,在這些字符就會丟失。
termencoding
termencoding 是 Vim 用於屏幕顯示的編碼,在顯示的時候, Vim 會把內部編碼轉換爲屏幕編碼,再用於輸出。內部編碼中含有沒法轉換爲屏幕編碼的字符時,該字符會變成問號,但不會影響對它的編輯操做。若是 termencoding 沒有設置,則直接使用 encoding 不進行轉換。
fileencoding
當 Vim 從磁盤上讀取文件的時候,會對文件的編碼進行探測。若是文件的編碼方式和 Vim 的內部編碼方式不一樣,Vim 就會對編碼進行轉換。轉換完畢後, Vim 會將 fileencoding 選項設置爲文件的編碼。當 Vim 存盤的時候,若是 encoding 和 fileencoding 不同, Vim 就會進行編碼轉換。
fileencodings
編碼的自動識別是經過設置 fileencodings 實現的,注意是複數形式。 fileencodings 是一個用逗號分隔的列表,列表中的每一項是一種編碼的名稱。當咱們打開文件的時候, VIM 按順序使用 fileencodings 中的編碼進行嘗試解碼,若是成功的話,就使用該編碼方式進行解碼,並將 fileencoding 設置爲這個值,若是失敗的話,就繼續試驗下一個編碼。
set fileencodings=utf-8, gb2312
若是編碼被誤判了,就會產生亂碼。若是你知道這個文件的正確編碼的話,能夠在打開文件的時候使用 ++enc=encoding 的方式來打開文件:e ++enc=utf-8 myfile.txt
fileformat
unix格式的換行符爲 0A(ascii 碼)也就是 ,dos 格式的換行符爲 0D 0A(也就是) ,其實就顯示爲 ^M,Mac 把回車做爲換行符,文本中既有unix 的換行符,又有 dos的換行符,那麼vim會認爲你打開的是 unix的,因此,那些dos的換行符就會出現 ^M,辦法是:
若你的 vim版本大於7.1 ,並想用 dos顯示和保存,以下語句:
:e ++ff=dos
若你的 vim版本小於等於7.1,又想把文章按照 dos格式顯示和保存,以下語句:
:set ff=dos :%s/\r\+$//e
若你的 vim版本小於等於7.1,又想把文章按照 unix格式顯示和保存,以下語句:
:set ff=unix :%s/\r\+$//e
sh""""""""""""""""""""""""""""""""""""""""" " windows版本gvim " 最後一次修改: 2013/1/23 """"""""""""""""""""""""""""""""""""""""" set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin """"""""""""""""""""""""""""""""""""""""" " 基本設置 """"""""""""""""""""""""""""""""""""""""" set number "顯示行號 set nobackup "不備份 colorscheme delek "配色方案 set tabstop=4 "TAB設置 set softtabstop=4 set shiftwidth=4 set foldmethod=marker "摺疊設置 "set foldmethod=syntax "set foldmethod=indent set foldlevel=100 set foldclose=all "關閉全部摺疊 set autoindent "縮進設置 set smartindent set cindent set fileformats=dos,unix "設置文件格式 """"""""""""""""""""""""""""""""""""""""" " 編碼和字體 """"""""""""""""""""""""""""""""""""""""" set fileencodings=gb2312,utf-8 set termencoding=gb2312 set fileencoding=gb2312 set guifont=Consolas:h11:cANSI """"""""""""""""""""""""""""""""""""""""" " 經常使用映射 """"""""""""""""""""""""""""""""""""""""" let mapleader="," "標籤 nnoremap L :tabnext<cr> nnoremap H :tabprevious<cr> nnoremap tn :tabnew "窗口分隔 nnoremap <c-h> <c-w>h nnoremap <c-j> <c-w>j nnoremap <c-k> <c-w>k nnoremap <c-l> <c-w>l "註釋 nnoremap <leader>/ I/*<space><esc>A<space>*/<esc>j nnoremap <leader>; ^xxx$xxxj inoremap <leader>/ /*<space><space>*/<left><left><left> "替換 nnoremap <leader>r :%s/\<\>//gc<left><left><left><left><left><left> nnoremap <c-f> /\<\><left><left> "摺疊 nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<cr> nmap <leader>cs O#if 0 /* comment by hl at <c-r>=strftime("%y/%m/%d %H:%M")<cr> {{{ */<esc> nmap <leader>ce o#endif /* comment by hl at <c-r>=strftime("%y/%m/%d %H:%M")<cr> }}} */<esc> "插入模式下方向鍵 imap <a-j> <down> imap <a-k> <up> imap <a-h> <right> imap <a-l> <left> """"""""""""""""""""""""""""""""""""""""" " ctags 插件 """"""""""""""""""""""""""""""""""""""""" set tags=tags; set autochdir nmap <c-[> <c-t> """"""""""""""""""""""""""""""""""""""""" " taglist 插件 """"""""""""""""""""""""""""""""""""""""" let Tlist_Ctags_Cmd = 'ctags.exe' let Tlist_Show_One_File = 1 "同時顯示多個文件函數列表 let Tlist_show_Exit_OnlyWindow = 1 "當taglist 是最後一個窗口時,自動退出 vim let Tlist_Use_Right_Window = 0 "讓窗口顯示在左邊 let Tlist_Process_File_Always = 0 "不要一直處理tags let Tlist_Auto_Close = 1 " 非當前文件,函數列表摺疊隱藏 """"""""""""""""""""""""""""""""""""""""" " DoxygenToolkit 插件 """"""""""""""""""""""""""""""""""""""""" let g:DoxygenToolkit_authorName = "hl - ssdlut" let g:DoxygenToolkit_briefTag_funcName = "yes" let g:DoxygenToolkit_emailString = "596150637@qq.com" let g:DoxygenToolkit_versionString = "1.0" "let g:DoxygenToolkit_briefTag_pre = "@brief " "let g:DoxygenToolkit_templateParamTag_pre = "@tparam " "let g:DoxygenToolkit_paramTag_pre = "@param " "let g:DoxygenToolkit_returnTag = "@return " "let g:DoxygenToolkit_throwTag_pre = "@throw " "let g:DoxygenToolkit_fileTag = "@file " "let g:DoxygenToolkit_authorTag = "@author " "let g:DoxygenToolkit_emailTag = "@e-mail " "let g:DoxygenToolkit_dateTag = "@date " "let g:DoxygenToolkit_versionTag = "@version " "let g:DoxygenToolkit_blockTag = "@name " "let g:DoxygenToolkit_classTag = "@class " "let g:DoxygenToolkit_commentType = "C" nnoremap <leader>da :DoxAuthor<cr> nnoremap <leader>df :Dox<cr> nnoremap <leader>db :DoxBlock<cr> """"""""""""""""""""""""""""""""""""""""" " omnicppcomplete 插件 " " <c-x> 進入補全模式 " <c-d> 宏定義 " <c-f> 文件名 " <c-k> 字典 " <c-i> 當前文件以及由#include包含進來的文件 " <c-l> 整個行 " <c-]> 標記(tags) " <c-p> 向前查找, 與沒有<c-x>命令時相同 " <c-n> 向後查找, 與沒有<c-x>命令時相同 " <c-o> 萬能補全 " <c-f> 文件名補全 " <c-v> VIM命令補全 " <c-u> 用戶定義補全 """"""""""""""""""""""""""""""""""""""""" imap <leader>s <c-x><c-n> imap <leader>d <c-x><c-p> imap <leader>f <c-x><c-o> """"""""""""""""""""""""""""""""""""""""" " 功能鍵映射 """"""""""""""""""""""""""""""""""""""""" "nmap <F2> :tabnew %:h<cr> "在新標籤中打開當前目錄 nmap <F2> :Texplore<cr> "生成 tags文件 nmap <F3> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<cr> "打開 taglist,不支持中文路徑 nmap <F4> :TlistToggle<cr> "make須要本身編寫 Makefile nmap <F6> :!nmake<cr> nmap <F8> :!nmake clean<cr> nmap <F7> :!nmake run<cr> """"""""""""""""""""""""""""""""""""""""" " 對齊 """"""""""""""""""""""""""""""""""""""""" nnoremap <leader>ch :call SetColorColumn()<cr> function! SetColorColumn() let col_num = virtcol(".") let cc_list = split(&cc, ',') if count(cc_list, string(col_num)) <= 0 execute "set cc+=".col_num else execute "set cc-=".col_num endif endfunction
sh""""""""""""""""""""""""""""""""""""""""" " Linux版本gvim " 最後一次修改: 2014/3/31 """"""""""""""""""""""""""""""""""""""""" set nocompatible filetype on """"""""""""""""""""""""""""""""""""""""" " 基本設置 """"""""""""""""""""""""""""""""""""""""" set number " 顯示行號 set nobackup " 不備份 colorscheme delek "配色方案 set tabstop=4 "TAB 設置 set softtabstop=4 set shiftwidth=4 set foldmethod=marker "摺疊設置 "set foldmethod=syntax "set foldmethod=indent set foldlevel=100 set foldclose=all "關閉全部摺疊 set autoindent "縮進設置 set smartindent set cindent set fileformats=unix "設置文件格式 """"""""""""""""""""""""""""""""""""""""" " 編碼和字體設置 """"""""""""""""""""""""""""""""""""""""" set termencoding=utf-8 set fileencoding=utf-8 set fileencodings=utf-8,gbk set guifont=Monospace\ Bold\ 10 "set guifont=Consolas\ Regular\ 12 """"""""""""""""""""""""""""""""""""""""" " 經常使用映射 """"""""""""""""""""""""""""""""""""""""" let mapleader="," "標籤 nnoremap L :tabnext<cr> nnoremap H :tabprevious<cr> nnoremap tn :tabnew nnoremap ts :tab split<cr> "窗口分隔 nnoremap <c-h> <c-w>h nnoremap <c-j> <c-w>j nnoremap <c-k> <c-w>k nnoremap <c-l> <c-w>l "註釋 nnoremap <leader>/ I/*<space><esc>A<space>*/<esc>j nnoremap <leader>; ^xxx$xxxj inoremap <leader>/ /*<space><space>*/<left><left><left> "替換 nnoremap <leader>r :%s/\<\>//gc<left><left><left><left><left><left> nnoremap <c-f> /\<\><left><left> "摺疊 nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<cr> nmap <leader>cs O#if 0 /* comment by hl at <c-r>=strftime("%y/%m/%d %H:%M")<cr> {{{ */<esc> nmap <leader>ce o#endif /* comment by hl at <c-r>=strftime("%y/%m/%d %H:%M")<cr> }}} */<esc> "插入模式下方向鍵 imap <a-j> <down> imap <a-k> <up> imap <a-h> <right> imap <a-l> <left> "make nnoremap cp :cp<cr> nnoremap cn :cn<cr> """"""""""""""""""""""""""""""""""""""""" " ctags 插件 """"""""""""""""""""""""""""""""""""""""" set tags=tags; set autochdir "nmap <c-[> <c-t> """"""""""""""""""""""""""""""""""""""""" " taglist 插件 """"""""""""""""""""""""""""""""""""""""" "let Tlist_Ctags_Cmd = 'ctags.exe' let Tlist_Show_One_File = 1 " 同時顯示多個文件函數列表 let Tlist_Exit_OnlyWindow = 1 "當taglist 是最後一個窗口時,自動退出 vim let Tlist_Use_Right_Window = 0 "讓窗口顯示在左邊 let Tlist_Process_File_Always = 0 "不要一直處理tags let Tlist_Auto_Close = 0 " 非當前文件,函數列表摺疊隱藏 """"""""""""""""""""""""""""""""""""""""" " DoxygenToolkit 插件 """"""""""""""""""""""""""""""""""""""""" let g:DoxygenToolkit_authorName = "hl - ssdlut" let g:DoxygenToolkit_briefTag_funcName = "no" let g:DoxygenToolkit_emailString = "596150637@qq.com" let g:DoxygenToolkit_versionString = "1.0" "let g:DoxygenToolkit_briefTag_pre = "@brief " "let g:DoxygenToolkit_templateParamTag_pre = "@tparam " "let g:DoxygenToolkit_paramTag_pre = "@param " "let g:DoxygenToolkit_returnTag = "@return " "let g:DoxygenToolkit_throwTag_pre = "@throw " "let g:DoxygenToolkit_fileTag = "@file " "let g:DoxygenToolkit_authorTag = "@author " "let g:DoxygenToolkit_emailTag = "@e-mail " "let g:DoxygenToolkit_dateTag = "@date " "let g:DoxygenToolkit_versionTag = "@version " "let g:DoxygenToolkit_blockTag = "@name " "let g:DoxygenToolkit_classTag = "@class " "let g:DoxygenToolkit_commentType = "C" nnoremap <leader>da :DoxAuthor<cr> nnoremap <leader>df :Dox<cr> nnoremap <leader>db :DoxBlock<cr> """"""""""""""""""""""""""""""""""""""""" " omnicppcomplete 插件 " " <c-x> 進入補全模式 " <c-d> 宏定義 " <c-f> 文件名 " <c-k> 字典 " <c-i> 當前文件以及由#include包含進來的文件 " <c-l> 整個行 " <c-]> 標記(tags) " <c-p> 向前查找, 與沒有<c-x>命令時相同 " <c-n> 向後查找, 與沒有<c-x>命令時相同 " <c-o> 萬能補全 " <c-f> 文件名補全 " <c-v> VIM命令補全 " <c-u> 用戶定義補全 """"""""""""""""""""""""""""""""""""""""" imap <leader>s <c-x><c-n> imap <leader>d <c-x><c-p> imap <leader>f <c-x><c-o> filetype plugin on set completeopt=menu,menuone let g:OmniCpp_SelectFirstItem = 0 "是否自動選擇第一個匹配項 let g:OmniCpp_ShowAccess = 1 " 顯示訪問控制信息 let g:OmniCpp_GlobalScopeSearch = 1 "全局查找控制。0:禁止; 1:容許( 缺省) let g:OmniCpp_NamespaceSearch = 1 " 0 , 1 or 2 let g:OmniCpp_DisplayMode = 1 let g:OmniCpp_ShowScopeInAbbr = 0 let g:OmniCpp_ShowPrototypeInAbbr = 1 let g:OmniCpp_MayCompleteDot = 1 let g:OmniCpp_MayCompleteArrow = 1 let g:OmniCpp_MayCompleteScope = 1 """"""""""""""""""""""""""""""""""""""""" " 功能鍵映射 """"""""""""""""""""""""""""""""""""""""" "nmap <F2> :tabnew %:h<cr> "在新標籤中打開當前目錄 nmap <F2> :Texplore<cr> "生成 tags文件 nmap <F3> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<cr> "nmap <F3> :!ctags -R --fields=+lS .<cr> "打開 taglist,不支持中文路徑 nmap <F4> :TlistToggle<cr> "make須要本身編寫 Makefile nmap <F6> :!make<cr> nmap <F7> :!make run<cr> nmap <F8> :!make clean<cr> """"""""""""""""""""""""""""""""""""""""" " 對齊 """"""""""""""""""""""""""""""""""""""""" nnoremap <leader>ch :call SetColorColumn()<cr> function! SetColorColumn() let col_num = virtcol(".") let cc_list = split(&cc, ',') if count(cc_list, string(col_num)) <= 0 execute "set cc+=".col_num else execute "set cc-=".col_num endif endfunction