映射是我最喜歡的vim功能了,通過它可以自由的設置自己的快捷鍵,可以大大提高我的編寫效率。映射可以理解為設置快捷鍵,就是讓你用少量的,便于按的鍵來替代比較多、繁的鍵。
什么時候用映射
如果你有以下一個或多個困擾,那么就可以來使用映射了哦
-
不滿現在的按鍵
-
想設置一些快捷鍵來提高編輯速度
-
想組合一些按鍵來完成新的需求
映射的分類
我們知道,vim有多種模式,與其對應的,映射也有nmap(普通映射)、imap(插入映射)、vmap(塊選擇映射)。
我們分別來選幾個案例來講講這三種映射。
普通映射
"?使用F1切換顯示行號 nmap?<f1>?:set?nu!?nu?<cr></cr></f1>
這里的CR表示回車鍵的意思。
插入映射
"?使用jj來代替esc鍵,完成從插入模式退回到普通模式 imap?jj?<esc>`^</esc>
一般我們都會使用jj來代替esc鍵,來完成快速從插入模式切換到普通模式。
"?在插入模式下向前向后刪除字符 imap?<c-b>?<backspace> imap?<c-d>?<esc>lxi</esc></c-d></backspace></c-b>
這里c表示ctrl鍵,在插入模式下,使用ctrl+b表示向后刪除一個字符,而使用ctrl+d表示向前刪除一個字符。
塊模式映射
一般的,我們經常會對多行文本來進行增加縮進,或者減少縮進。之前一篇文章說過,可以通過塊選擇結合命令行、或者通過宏來實現該需求。今天,學了映射后,可以使用一個更加簡單的方法即可實現需求。
vmap??>gv
現在,如果我們想對多行進行縮進,只需選擇好這些行,然后按下>或
遞歸映射
如果你下一下的映射時,會發生什么
nmap?dd?O<esc>jddk</esc>
如果當你執行了dd后,會發生嚴重的問題的。因為映射兩邊都有dd,所以會導致無限循環。這種無限循環是由于遞歸造成了,所以叫做遞歸映射。
大家可以看到,遞歸映射是有危害的,所以,工作中一律不準使用遞歸映射,而是要采用非遞歸映射。那么如果進行非遞歸映射呢?也非常簡單,加4個字母即可nore
-
nmap 遞歸 ? ?nnoremap 非遞歸
-
imap 遞歸 ?inoremap非遞歸
-
vmap 遞歸 vnoremap 非遞歸