VsVim使用教程(以及簡要vim介紹)

1. 配置快捷鍵

1.四種模式:normal,insert,visual,command
2.映射
   map:imap,nmap,vmap,cmap
   noremap:inoremap,nnoremap,vnoremap,cnoremap
3.Visual Studio 快捷鍵
    0.VsVim配置
        Optins->VsVim->
        Defaults:Use Editor Command Margin->False (否則,有命令框)
        Keyboard:set your Keyboard ->include All Scopes
    1.VsVimrc路徑
        home下,_vsvimrc
    2.Vs命令查看方式:
        英語環境
        Tools->Options->Environment->Keyboard
        View->OtherWindow->Command Window
    3.在vim中調用快捷命令
        :vsc VAssistX.OpenFileInSolutionDialog<cr>

2.vim的常用命令

1.normal模式下
    1.移動
        .基本移動
            hjkl
            j:下
            k:上
            h:左
            l:右
        .單詞移動
            w:word  "跳轉到單詞的頭"
            W:WORD
            e:word's end   "跳轉到單詞的結尾"
            E:WORD's end
            ge:word's end "跳轉到上一個單詞的結尾"
            gE:WORD's end
            b:back "跳轉到單詞的頭"
            B:back "跳轉到WORD的頭"
        .行移動
            _: 跳轉到行的第一個字符
            0:  跳轉到行首
            $:  跳轉到行的最後一個字符
        .縮進行
            >> :向右縮進
            << :向左縮進
        .段落移動:
            {: 向上移動一個段落
            }: 向下移動一個段落
            [[:
            ]]:
            {[:
            }]:
        .屏幕移動
            gg: 跳轉到文件首部
            G:  跳轉到文件結尾
            12gg:   跳轉到第12行
            zz: 當前光標移動到屏幕最中央
            zt: 當前光標移動到屏幕最上方(top)
            zb: 當前光標移動到屏幕最下方(bottom)
            c-f:    下翻半頁
            c-u:    上翻半頁
    2.進入插入模式
        i:  插入到光標前
        I:  插入到行的最前面
        a:  插入到光標後
        A:  插入到行的最後面
        s:刪除光標下的字符,並進入插入模式
        S:刪除當前行所有字符,並進入插入模式
        ce/cw: 刪除當前光標到word末尾處的字符,進入插入模式
        C:刪除當前光標後的所有字符,並進入插入模式

        o:插入到下一行
        O:插入到上一行
    3.撤銷和reDo
        u:  撤銷
        c-r: redo
    4.替換
        r:  用輸入替換光標下的字符
        R:進入替換模式
    5.查找:
        .單行
        f{char}:    從當前光標向後查找char。
        F{char}:    從當前光標向前查找char
        t{char}:    從當前光標向後查找char,光標落到char之前
        T{char}:    從當前光標向前查找char,光標落到char之後
            ; :下一個char
            , :上一個char
        .整個文件中查找
        / : 從當前行向下查找
        ? : 從當前行向上查找
        * : 從當前向下,查找當前光標下的word 
        # : 從當前向上,查找當前光標下的word 
        n : 下一個查找結果
        N : 上一個查找結果
    6.刪除
        x:剪切當前光標下的字符
        X:剪切當前光標前的一個字符

        d{motion}:刪除
        dl: 刪除當前光標下的一個字符
        de/dw: 刪除當前光標下到word end的字符
        db: 刪除當前光標下,到word head的字符
        D:  刪除當前光標下到行尾的字符
    7.複製
        y{motion}:複製
        yl: 複製當前光標下的一個字符
        yy/Y:複製當前行
        ye/yw: 複製當前光標到word end的字符
        yb:複製當前光標前一字符到word head的字符
    8.粘貼
        p:粘貼到當前光標後
        P:粘貼到當前光標前

    9.點範式(.)
        . :重複上次的修改(移動,刪除,增加)
    10.組合命令
        yyp:複製當前行到下一行
        ddp:和下一行交換(刪除當前行,複製到下一行)
        xp:交換兩個chr的位置

        yi(:複製括號()中的內容 yi{ yi[ yi" yi'
        di(:刪除括號()中的內容 di{ di[ di" di'
        %:跳轉匹配的{}、()、[]
    11.修改文本
       J:將光標所在的下一行和本行連接,並且中間隔一個空格
       gJ:將光標所在的下一行和本行連接(下一行的空格也連接)


2.insert模式下
    c-o:暫時進入normal模式。一次命令後,回到插入模式。


3.visual模式(visual(可視行,可視塊))),select(選擇))
    normal模式進入可視模式:
        v:字符可視模式
        V:行visual
        c-v:塊visual
    退出可視模式:
        行/塊visual  v-> visual v-> normal
        字符可視模式  v ->normal
        <esc> or <c-[>
    塊模式下插入:
        c-V:進入塊模式,並選擇好區域
        I    在所選區域前,進入塊插入模式(插入的內容會在所有列都插入)
        A    在所選區域後,進入塊插入模式(插入的內容會在所有列都插入)
        c    刪除所選區域內容,並進入塊插入模式(插入的內容會在所有列都插入)
        C    刪除所選區域以及所選區域後的所有內容,並且進入塊插入模式(插入的內容會在所有列都插入)
        <esc> 退出到normal模式

    c-g:切換可視模式和選擇模式

    可用命令:
        移動:hjkl
        查找:f{char} ; , n/N
        刪除:c C d x s
    其他命令:
        o: 切換選中區域的首和尾
        U: 選中的字符全部大寫 
        u: 選中的字符全部小寫
        ~:選中的字符切換大小寫

    組合命令:
    ve/vw/viw:選中一個單詞
    vu:光標下的字符小寫
    vU:光標下的字符大寫
    veu/U:選中一個單詞小寫/大寫


4.command模式
    在normal模式或者visual模式下輸入冒號:,進入命令模式
    normal模式下的命令,可以在命令模式下運行
    command下也可以運行ex命令
    :com[mand]  列出所有用戶自定義的命令
    基本命令:
    :w[a]  [全部]寫入(保存) 
    :q[a]  [全部]退出        
    :c[a]  [全部]關閉buffer
    :x[a]  [全部]和:wq類型,當文件有修改時候,會寫入

    :[range]copy/co/t {address}  將範圍內的行復制到目標地址處  {address}使用符號
    :[range]move {address}    將範圍內的行移動到目標地址處

    :normal 命令,在命令行中執行normal模式下的命令
    如果是visual模式,會呈現
    :'<,'>normal    會在每一行都執行命令


5.命令範圍
    .command模式下
        vim中,在單個文件中,
        1.以行號爲地址
        2.此外,還有一些特殊符號表示地址,例如:
            %   整個文件(:1,$的簡寫形式)
            .   光標所在位置。當前位置
            1   文件第一行
            $   文件最後一行
            0   虛擬行,位於文件第一行上方
            'm  包含標記m的行
            '<  高亮選區的起始行
            '>  高亮選區的結束行

        範圍的表示用逗號隔開,例如 add1,add2
        :12,15d 表示刪除12行到15行內容
        :[range]d[elete] [x] {count}    "x到代表寄存器x裏"
    .normal模式下
        normal中的一些命令,可以指定運行次數,例如:
            2dd 運行兩次dd->刪除兩行
            2yy 運行兩個yy->複製兩行

3.mark和跳轉

mx:添加本文件"書籤"x
mX:添加全局"書籤"X
`x:跳轉到書籤x所在的行和列
'x:跳轉到書籤x所在行
``:跳轉到本文件上次離開的位置
gi:跳轉到上一次插入的位置
gv:跳轉到上一次進入visual的位置

4.VsVim的配置

1.重要配置
    set backspace=indent,eol,start "退格鍵設置"
    set clipboard=unnamed   "默認的剪切寄存器"
    set ignorecase  "忽略大小寫"
2.推薦配置
    1.註釋
        :vnoremap ci :s/^/\/\/<cr>
        :vnoremap cu :s/\/\//<cr>
        :nnoremap ci :s/^/\/\/<cr>
        :nnoremap cu :s/\/\//<cr>
    2.相關配置
        .單個文件中:
        :inoremap jj <esc>  "退出插入模式"
        :noremap gd <c-]>zz "跳轉到定義"
        :nnoremap gq ==     "代碼格式format"
        :vnoremap gq ==
        :nnoremap <space> za "摺疊"
        :nnoremap zm :vsc VAssistX.ListMethodsInCurrentFile<cr> "函數列表"
        :nnoremap cj :vsc VAssistX.FindReferencesinFile<CR> "當前文件中的引用"
        :nnoremap ca :vsc VAssistX.FindReferences<CR> "查看所有引用"
        :nnoremap cm :vsc File.OpenContainingFolder<CR> "打開所在文件夾"
        :nnoremap zj :vsc Edit.QuickInfo<CR> "查看函數定義文檔"
        :nnoremap zp :vsc VAssistX.RefactorImplementInterface<CR> "實現接口"

        "visual模式中的查找"
        :vnoremap * "/y/<C-r>/<CR>
        :vnoremap # "/y?<C-r>/<CR>

        .多文件
        :nnoremap <c-o> :vsc View.NavigateBackward<CR>  
        :nnoremap <c-i> :vsc View.NavigateForward<CR>

        "打開查看類的對話框
        :nnoremap cs :vsc VAssistX.FindSymbolDialog<CR>

        "打開查看文件的對話框
        :nnoremap cf :vsc VAssistX.OpenFileInSolutionDialog<CR>

        "open VAOutline
        :nnoremap co :vsc VAssistX.VAOutline<CR>

        "打開解決方案資源管理器
        :nnoremap cv :vsc View.SolutionExplorer<CR>

        "在文件中查找
        :nnoremap ck :vsc Edit.FindinFiles<CR>

        "end
3.配置文件
    source filefullPath     "讀取filefullPath的配置內容,並運行"

5.寄存器介紹和使用

vim提供了幾十組寄存器,用於保存文本
爲命令添加 "{register}  表示指定要使用的寄存器。若不指定,將缺省用unnamed無名寄存器
     "x      表示引用了寄存器x

""      unnamed 無名寄存器,如果沒有指定要使用的寄存器,vim會缺省使用此寄存器
"_      黑洞寄存器(實際上並沒有存儲,如果"_d{motion}會執行真正的刪除)
"0      複製專用寄存器  (複製的時候,不僅會把內容拷貝到無名寄存器中,還會拷貝到此寄存器)
"a-"z   a-z寄存器(26個英文字母都是寄存器的名字)
"+      系統剪貼板寄存器 (使用"+p來粘貼系統剪貼板的內容)(X11剪切板,用剪切、複製與粘貼命令操作)
"*      選擇專用寄存器 (X11主剪切板,用鼠標中斷操作)
"=      表達式寄存器.在插入模式下c-r= ,會進入命令行模式,輸入表達式回車之後的結果將插入文本中
"%      存儲了當前文件名
"#      存儲了輪換文件名
".      存儲了上次插入的文本
":      存儲了上次執行的Ex命令
"/      存儲了上次查找的模式

使用示例:
"fyy    將複製的內容存儲到f寄存器
"fp     將f寄存器中的內容粘貼出來

:reg[ister] "{register}     查看{register}中的內容

6.宏

把命令序列錄製成宏
在normal,q鍵開始/停止錄製宏。
開始錄製:
    q{register} 表示指定將宏錄製到哪個寄存器中
停止錄製:
    再次按q,停止錄製

@{register} 表示執行寄存器中的命令
@@  重複最近調用過的宏
[count]@{register}  執行count次宏       串行方式
:reg {register} 查看寄存器中的內容

追加:
    qa  錄製按鍵操作,並覆蓋a寄存器中原有內容
    qA  錄製按鍵操作,並追加到a寄存器中
在插入模式中,插入寄存器中的內容:
c-r{register}   將寄存器中的內容插入到文本中
.多次執行宏:
    串行和並行。在處理錯誤的方式中,串行遇到錯誤,就返回。
    1.串行
        [count]@{register}
    2.並行
        :'<,'>normal @{register}
.迭代求值的方式給列編號
    使用了表達式寄存器(=),以便插入的時候,可以進行運算
    (不要試圖控制每次執行多少遍宏(vim 函數))
    let i=0
    qa 0f[ls<c-r>=i<esc>j
    :let i+=1
    q
.編輯宏
    宏中使用的是鍵盤編碼,
    如果使用<c-r>{register}的方式獲取的寄存器內容不一樣。
    不過,可以使用將寄存器中的內容粘貼出來的方式。
    1.輸出到文本中編輯
        "{register}p        會粘貼到光標後,所以,用:put 輸出到下一行
        :put {register}
        將寄存器內容輸入到文本中
        編輯完成之後,
        "{register}dd       注意,Windows下,可能會將末尾的^M也粘貼進去。可以使用選中->刪除到寄存器中
        將文本內容刪除並讀取到寄存器中
    2.使用函數
        :let @{register}=......

7.替換

:[range]s/{original}/{new}/[g]  g表示全部替換,否則只替換第一個遇到的

8.小技巧

1.
ctrl+h 刪除前一個字符,相當於退格鍵
ctrl+w 刪除前一個單詞
ctrl+u 刪除至行首
2.
num<C-a> :第一個遇到的數字加num 
num<C-x> :第一個遇到的數字減num 

tips:

:help [   index幫助文檔中,所有命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章