vim

VIM

光標移動

  • 基本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 次

MAP

  • 映射模式

    普通模式
    可視模式
    操做符等待模式
    插入模式
    命令行模式
  • 映射模式代號

    <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>    方向鍵右

DIFF

  • 基本用法

    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'命令保存哪些內容,以及保存的數目

TAB

  • 命令

    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,辦法是:

  1. 若你的 vim版本大於7.1 ,並想用 dos顯示和保存,以下語句:

    :e ++ff=dos
  2. 若你的 vim版本小於等於7.1,又想把文章按照 dos格式顯示和保存,以下語句:

    :set ff=dos
    :%s/\r\+$//e
  3. 若你的 vim版本小於等於7.1,又想把文章按照 unix格式顯示和保存,以下語句:

    :set ff=unix
    :%s/\r\+$//e

VIMRC

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
相關文章
相關標籤/搜索