vim的幾種模式mode和按鍵映射map


vim里最基本的map用法也就是

:map c a

這里把c映射成了a,在map生效的情況下,按下c就等同於按下了a
當然,常用的Ctrl,Shift,Alt自然也是支持的。

    • 令Ctrl+a對應到a
:map  a
    • 令Alt+a對應到a
:map  a
    • 令Ctrl+Alt+a對應到a
:map  a

到此,我們已經可以做很多事情了。
但是map命令遠不只這一種,在不同的模式下,同一組按鍵可以被映射到不同的組合上。
Vim的模式眾多,但是一般被提及的也就是這么幾種:

    1. Normal Mode

也就是最一般的普通模式,默認進入vim之后,處於這種模式。

Visual Mode

一般譯作可視模式,在這種模式下選定一些字符、行、多列。
在普通模式下,可以按v進入。

Insert Mode

插入模式,其實就是指處在編輯輸入的狀態。普通模式下,可以按i進入。

Select Mode

在gvim下常用的模式,可以叫作選擇模式吧。用鼠標拖選區域的時候,就進入了選擇模式。
和可視模式不同的是,在這個模式下,選擇完了高亮區域后,敲任何按鍵就直接輸入並替換選擇的文本了。
和windows下的編輯器選定編輯的效果一致。普通模式下,可以按gh進入。

Command-Line/Ex Mode

就叫命令行模式和Ex模式吧。兩者略有不同,普通模式下按冒號(:)進入Command-Line模式,可以輸入各種命令,
使用vim的各種強大功能。普通模式下按Q進入Ex模式,其實就是多行的Command-Line模式。

對於Map,有幾個基本的概念

    • 命令的組合

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

    • nore

表示非遞歸,見下面的介紹

    • n

表示在普通模式下生效

    • v

表示在可視模式下生效

    • i

表示在插入模式下生效

    • c

表示在命令行模式下生效

    • Recursive Mapping

遞歸的映射。其實很好理解,也就是如果鍵a被映射成了b,c又被映射成了a,如果映射是遞歸的,那么c就被映射成了b。

:map a b
:map c a

對於c效果等同於

:map c b

默認的map就是遞歸的。如果遇到[nore]這種前綴,比如:noremap,就表示這種map是非遞歸的。

    • unmap

unmap后面跟着一個按鍵組合,表示刪除這個映射。

:unmap c

那么在map生效模式下,c不再被映射到a上。

同樣,unmap可以加各種前綴,表示影響到的模式。

    • mapclear

mapclear直接清除相關模式下的所有映射。
同樣,mapclear可以加各種前綴,表示影響到的模式。

這里列出常用的一些map命令,默認map命令影響到普通模式和可視模式。

詳細查看 :help map-overview:

     COMMANDS                    MODES ~
:map   :noremap  :unmap     Normal, Visual, Select, Operator-pending
:nmap  :nnoremap :nunmap    Normal
:vmap  :vnoremap :vunmap    Visual and Select
:smap  :snoremap :sunmap    Select
:xmap  :xnoremap :xunmap    Visual
:omap  :onoremap :ounmap    Operator-pending
:map!  :noremap! :unmap!    Insert and Command-line
:imap  :inoremap :iunmap    Insert
:lmap  :lnoremap :lunmap    Insert, Command-line, Lang-Arg
:cmap  :cnoremap :cunmap    Command-line


字母代表含義:

'n' (for normal), 'v' (for visual and select), 'c' (for command), 'x' (for visual mode), 's' (for select), 'o' (for operator pending).

可以試試這些命令

  1. 命令行模式下建一個mapping
     nmap b a 
  2. 現在普通模式下,按b,可以進入插入模式,隨便輸入一些字符
  3. 命令行模式下建一個mapping
     vmap b d 
  4. 現在普通模式下,按V,進入了可視模式,並且選定了一整行,按下b,可以刪除整行
  5. 命令行模式下建一個mapping
     imap b a 
  6. 現在試着給正在編輯的這個文件輸入一個字符”b”吧 :p
  7. 命令行模式下建一個mapping
     cmap b c 
  8. 命令行模式下, 按下b,會出來一個a

如果vim的按鍵已經被你弄得亂七八糟了,試着用unmap和mapclear清除這些mapping,  或者用noremap 來中斷遞歸執行.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM