1. 配置快速鍵
1.四種模式:normal,insert,visual,command2.映射 map:imap,nmap,vmap,cmap noremap:inoremap,nnoremap,vnoremap,cnoremap3.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:添加本檔案"書籤"xmX:添加全域"書籤"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> "end3.設定檔 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協助文檔中,所有命令