99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Vimscript 精確映射

2018-02-24 16:02 更新

準(zhǔn)備好,下面的內(nèi)容會(huì)比較難以理解。

目前為止,我們已經(jīng)使用map、nmapvmap以及imap創(chuàng)建了實(shí)用的按鍵映射。 他們很方便,但是有個(gè)缺點(diǎn)。運(yùn)行下面的命令:

:nmap - dd
:nmap \ -

試試按下\(在normal模式)。有什么現(xiàn)象?

當(dāng)你按下\時(shí),Vim會(huì)解釋其為-。但是我們又映射了-!Vim會(huì)繼續(xù)解析-dd, 即它會(huì)刪除整行。

你使用那些命令創(chuàng)建的映射可能會(huì)被Vim解釋成?其它?的映射。乍一聽(tīng)這像是一個(gè)優(yōu)點(diǎn), 但實(shí)際上這很變態(tài)。解釋原因之前,我們先用如下命令刪除那些映射:

:nunmap -
:nunmap \

遞歸

運(yùn)行命令:

:nmap dd O<esc>jddk

上面的命令看上去像是要映射dd為:

  • 在當(dāng)前行之前添加新行
  • 退出insert模式
  • 向下移動(dòng)一行
  • 刪除當(dāng)前行
  • 向上移動(dòng)到新加的行

貌似這個(gè)映射的作用是“清除當(dāng)前行”。但你可以試試。

當(dāng)你按下dd后,Vim就不動(dòng)了。按下<c-c>才可以繼續(xù),但是你的文件中會(huì)多出許多 空行!想想發(fā)生了什么?

這個(gè)映射實(shí)際上是?遞歸?的!當(dāng)你按下dd后,Vim解釋為:

  • dd存在映射,執(zhí)行映射的內(nèi)容。
    • 新建一行。
    • 退出insert模式。
    • 向下移動(dòng)一行。
    • dd存在映射,執(zhí)行映射的內(nèi)容。
      • 新建一行。
      • 退出insert模式。
      • 向下移動(dòng)一行。
      • dd存在映射,執(zhí)行映射的內(nèi)容。然后一直這樣。

這個(gè)映射永遠(yuǎn)不會(huì)結(jié)束!刪除這個(gè)可怕的映射再繼續(xù):

:nunmap dd

負(fù)面影響

*map系列命令的一個(gè)缺點(diǎn)就是存在遞歸的危險(xiǎn)。另外一個(gè)是如果你安裝一個(gè)插件,插件 映射了同一個(gè)按鍵為不同的行為,兩者沖突,有一個(gè)映射就無(wú)效了。

當(dāng)安裝一個(gè)新的插件時(shí),可能你不會(huì)使用或記住每一個(gè)其創(chuàng)建的映射。即使你記住了,你還得 回看下你的~/.vimrc文件以確保你自定義的映射與插件創(chuàng)建的沒(méi)有沖突。

這導(dǎo)致插件安裝變得乏味,易于出錯(cuò)??隙ㄓ袀€(gè)解決辦法。

非遞歸映射

Vim提供另一組映射命令,這些命令創(chuàng)建的映射在運(yùn)行時(shí)?不會(huì)?進(jìn)行遞歸。運(yùn)行命令:

:nmap x dd
:nnoremap \ x

按下\看看有什么現(xiàn)象。

當(dāng)你按下\時(shí),Vim忽略了x的映射,僅按照x的默認(rèn)操作執(zhí)行。即刪除當(dāng)前光標(biāo)下的字符 而不是刪除整行。

每一個(gè)*map系列的命令都有個(gè)對(duì)應(yīng)的*noremap命令,包括:noremap/nnoremap、?vnoremapinoremap。這些命令將不遞歸解釋映射的內(nèi)容。

該何時(shí)使用這些非遞歸的映射命令呢?

答案是:?任何時(shí)候?。

是的,沒(méi)開(kāi)玩笑,?任何時(shí)候?。

在安裝插件或添加新的自定義映射時(shí)使用*map系列命令純屬是給自己??麻煩。 多敲幾個(gè)字符以確保這個(gè)問(wèn)題不會(huì)發(fā)生,救自己于火海。

練習(xí)

將之前章節(jié)中添加到~/.vimrc文件中的映射命令全部換成非遞歸版本。

讀幫助文檔:help unmap。

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)