W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
準(zhǔn)備好,下面的內(nèi)容會比較難以理解。
目前為止,我們已經(jīng)使用map
、nmap
、vmap
以及imap
創(chuàng)建了實用的按鍵映射。 他們很方便,但是有個缺點。運行下面的命令:
:nmap - dd
:nmap \ -
試試按下\
(在normal模式)。有什么現(xiàn)象?
當(dāng)你按下\
時,Vim會解釋其為-
。但是我們又映射了-
!Vim會繼續(xù)解析-
為dd
, 即它會刪除整行。
你使用那些命令創(chuàng)建的映射可能會被Vim解釋成?其它?的映射。乍一聽這像是一個優(yōu)點, 但實際上這很變態(tài)。解釋原因之前,我們先用如下命令刪除那些映射:
:nunmap -
:nunmap \
運行命令:
:nmap dd O<esc>jddk
上面的命令看上去像是要映射dd
為:
貌似這個映射的作用是“清除當(dāng)前行”。但你可以試試。
當(dāng)你按下dd
后,Vim就不動了。按下<c-c>
才可以繼續(xù),但是你的文件中會多出許多 空行!想想發(fā)生了什么?
這個映射實際上是?遞歸?的!當(dāng)你按下dd
后,Vim解釋為:
dd
存在映射,執(zhí)行映射的內(nèi)容。
dd
存在映射,執(zhí)行映射的內(nèi)容。
dd
存在映射,執(zhí)行映射的內(nèi)容。然后一直這樣。這個映射永遠(yuǎn)不會結(jié)束!刪除這個可怕的映射再繼續(xù):
:nunmap dd
*map
系列命令的一個缺點就是存在遞歸的危險。另外一個是如果你安裝一個插件,插件 映射了同一個按鍵為不同的行為,兩者沖突,有一個映射就無效了。
當(dāng)安裝一個新的插件時,可能你不會使用或記住每一個其創(chuàng)建的映射。即使你記住了,你還得 回看下你的~/.vimrc
文件以確保你自定義的映射與插件創(chuàng)建的沒有沖突。
這導(dǎo)致插件安裝變得乏味,易于出錯??隙ㄓ袀€解決辦法。
Vim提供另一組映射命令,這些命令創(chuàng)建的映射在運行時?不會?進(jìn)行遞歸。運行命令:
:nmap x dd
:nnoremap \ x
按下\
看看有什么現(xiàn)象。
當(dāng)你按下\
時,Vim忽略了x
的映射,僅按照x
的默認(rèn)操作執(zhí)行。即刪除當(dāng)前光標(biāo)下的字符 而不是刪除整行。
每一個*map
系列的命令都有個對應(yīng)的*noremap
命令,包括:noremap
/nnoremap
、?vnoremap
和inoremap
。這些命令將不遞歸解釋映射的內(nèi)容。
該何時使用這些非遞歸的映射命令呢?
答案是:?任何時候?。
是的,沒開玩笑,?任何時候?。
在安裝插件或添加新的自定義映射時使用*map
系列命令純屬是給自己?找?麻煩。 多敲幾個字符以確保這個問題不會發(fā)生,救自己于火海。
將之前章節(jié)中添加到~/.vimrc
文件中的映射命令全部換成非遞歸版本。
讀幫助文檔:help unmap
。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: