1. 程式人生 > >Vim中快捷鍵命令介紹

Vim中快捷鍵命令介紹

map命令簡介

map是一個對映命令,將常用的很長的命令對映到一個新的功能鍵上。map是Vim強大的一個重要原因,可以自定義各種快捷鍵,用起來自然得心應手。Vim中有五種對映存在:

  1. 用於普通模式: 輸入命令時。 2, 用於可視模式: 可視區域高亮並輸入命令時。
  2. 用於操作符等待模式: 操作符等待中 (“d”,”y”,”c” 等等之後)。
  3. 用於插入模式: 也用於替換模式。
  4. 用於命令列模式: 輸入 “:” 或 “/” 命令時。

Vim的模式,細分的話有6種之多,分別為:

  1. Normal Mode,也就是最一般的普通模式,預設進入vim之後,處於這種模式。
  2. Visual Mode,一般譯作可視模式,在這種模式下選定一些字元、行、多列。在普通模式下,可以按v進入。
  3. Insert Mode,插入模式,其實就是指處在編輯輸入的狀態。普通模式下,可以按i進入。
  4. Select Mode,選擇模式。用滑鼠拖選區域的時候,就進入了選擇模式。和可視模式不同的是,在這個模式下,選擇完了高亮區域後,敲任何按鍵就直接輸入並替換選擇的文字了。和windows下的編輯器選定編輯的效果一致。普通模式下,可以按gh進入。
  5. Command-Line/Ex Mode,命令列模式和Ex模式。兩者略有不同,普通模式下按冒號(:)進入Command-Line模式,可以輸入各種命令,使用vim的各種強大功能。普通模式下按Q進入Ex模式,其實就是多行的Command-Line模式。

命令的組合

同Vim下的其他命令一樣,命令的名字往往由好幾段組成。字首作為命令本身的修飾符,微調命令的效果。對於map而言,可能有這麼幾種字首:

  1. nore,表示非遞迴。遞迴的對映。其實很好理解,也就是如果鍵a被對映成了b,c又被對映成了a,如果對映是遞迴的,那麼c就被對映成了b。
  2. n,表示在普通模式下生效。
  3. v,表示在可視模式下生效。
  4. i,表示在插入模式下生效。
  5. c,表示在命令列模式下生效。

普通模式的對映命令

  1. map,命令格式=>:map {lhs} {rhs},其含義是,在:map作用的模式中把鍵系列 {lhs} 對映為 {rhs},{rhs}可進行對映掃描,也就是可遞迴對映。例如::map td :tabnew .<cr>,表示在其作用模式(普通、可視、操作符)下,輸入td等價於輸入 :tabnew .<cr>。而普通模式下輸入:tabnew . <cr>就是開啟當前目錄。如果再定義繫結 :map ts td,就是指在其作用模式下輸入ts等價於td,也就是開啟當前目錄。不過如果沒有特殊需要,一般不建議遞迴對映。
  2. noremap ,:noremap和:map命令相對,作用模式和命令格式都相同,只不過不允許再對{rhs}進行對映掃描,也就是{lhs}定義後的對映就是{rhs}的鍵序列,不會再對{rhs}鍵序列重新解釋掃描。它一般用於重定義一個命令,當然如果:map不需要遞迴對映的話,建議使用:noremap。比如,:noremap ts td,它的意思是在其作用模式下,輸入ts就是輸入td,但是和:map不同的是,此時td再不會做進一步掃描解釋。雖然之前已經定義了td,但是不會對td再做掃描。
  3. unmap,:unmap是對應取消:map繫結的{lhs},作用模式相同,命令格式 :unmap {lhs}。例如,:unmap td就是取消在其作用模式中td的繫結,比如之前td被繫結為:tabnew .<cr>,此時此繫結消失。
  4. mapclear,:mapclear時對應取消所有:map繫結的,慎用!
  5. nmap,:nmap是:map的普通模式板,也就是說其繫結的鍵只作用於普通模式。例如,:nmap td :tabnew .<cr> 和 :map td :tabnew .<cr> 在普通模式下等效。
  6. nnoremap,:nnorempa和:nmap的關係和:noremap和:map的關係一樣,只是:nmap的非遞迴版。
  7. nunmap,:nunmap和:nmap的關係和:unmap和:map的關係一樣,取消:nmap的繫結。
  8. nmapclear,:nmapclear是對應取消所有:map繫結的,慎用!

{rhs} 之前可能顯示一個特殊字元。* 表示它不可重對映,& 表示僅指令碼的區域性對映可以被重對映,@ 表示緩衝區的區域性對映。

鍵盤按鍵的表示

  • <k0> - <k9> 小鍵盤 0 到 9
  • <S-...> Shift+鍵
  • <C-...> Control+鍵
  • <M-...> Alt+鍵 或 meta+鍵
  • <A-...> 同 <M-...>
  • <Esc> Escape 鍵
  • <Up> 游標上移鍵
  • <Space> 插入空格
  • <Tab> 插入Tab
  • <CR> 等於<Enter>

特殊引數

有些特殊引數必須對映命令的後邊,在其他任何引數的前面。

  1. <buffer>,<buffer>如果這些對映命令的第一個引數是<buffer>,對映將只侷限於當前緩衝區(也就是你此時正編輯的檔案)內。比如,:map <buffer> ,w /a<CR>。它的意思時在當前緩衝區裡定義鍵繫結,“,w”將在當前緩衝區裡查詢字元a。同樣你可以在其他緩衝區裡定義,:map <buffer> ,w /b<CR>。比如我經常開啟多個標籤(:tabedit),想要在各自標籤裡定義”,w”鍵繫結,那麼你只要在每個標籤頁裡分別定義就可,其作用域也只在各自的標籤裡。同樣要清除這些緩衝區的鍵繫結也要加上<buffer>引數,比如,:unmap <buffer> ,w :mapclear <buffer>。
  2. <silent>,<silent>是指執行鍵繫結時不在命令列上回顯,比如,:map <silent> ,w /abcd<CR>。你在輸入,w查詢abcd時,命令列上不會顯示/abcd,如果沒有<silent>引數就會顯示出來。
  3. <special>,<special>一般用於定義特殊鍵怕有副作用的場合。比如,:map <special> <F12> /Header<CR>。
  4. <expr>,<expr>. 如果定義新對映的第一個引數是<expr>,那麼引數會作為表示式來進行計算,結果使用實際使用的,例如,:inoremap <expr> . InsertDot(),這可以用來檢查游標之前的文字並在一定條件下啟動全能 (omni) 補全。
  5. <unique>,<unique>一般用於定義新的鍵對映或者縮寫命令的同時檢查是否該鍵已經被對映,如果該對映或者縮寫已經存在,則該命令會失敗。
  6. <Leader>和mapleader變數,mapleader變數對所有map對映命令起效,它的作用是將引數<leader>替換成mapleader變數的值,比如,:map <Leader>A oanother line<Esc>,如果mapleader變數沒有設定,則用預設的反斜槓代替,因此這個對映等效於,:map \A oanother line<Esc>,意思時輸入\A鍵時,在下一行輸入another line並返回到普通模式。如果設定了mapleader變數,比如,let mapleader = ",",那麼就等效於,:map ,A oanother line<Esc>。
  7. <LocalLeader>和maplocalleader變數,<LocalLeader>和<Leader>類似,只不過它只作用於緩衝區。因此在設定mapleader和maplocalleader時最好區分開,不要出現衝突。