Vimscript 模式映射

2018-02-24 16:02 更新

上一章中我們談?wù)摿巳绾卧赩im中映射按鍵。我們使用的命令map在normal模式下工作。 如果閱讀本章之前你自己已經(jīng)折騰了,可能會(huì)注意到這個(gè)映射在visual模式一樣工作。

你可以使用nmapvmapimap命令分別指定映射僅在normal、visual、insert模式有效。

執(zhí)行如下命令:

:nmap \ dd

在normal模式下,按下\。Vim會(huì)刪除當(dāng)前行。

現(xiàn)在進(jìn)入Visual模式,再次按下\。什么都不會(huì)發(fā)生,因?yàn)槲覀兏嬖V了Vim這個(gè)映射僅在normal 模式下工作(同時(shí)\的默認(rèn)行為是什么都不做)。

運(yùn)行如下命令:

:vmap \ U

進(jìn)入visual模式并選中一些文字,按下\。Vim將把選中文本轉(zhuǎn)換成大寫格式。

分別在normal模式和visual模式測試\按鍵,注意不同模式下的效應(yīng)。

增強(qiáng)記憶

起初,將同樣的按鍵根據(jù)當(dāng)前模式的不同映射到不同的功能聽起來很可怕。為什么每次按下 那個(gè)鍵之前都要停下想想我們現(xiàn)在是在什么模式?那樣是不是更浪費(fèi)時(shí)間?

實(shí)踐中我們發(fā)現(xiàn)那真不是個(gè)問題。一旦你經(jīng)常使用Vim,你就不會(huì)在意你按下的鍵了。 你會(huì)想“刪除一行”,而不是“按`dd·”。你的手指和大腦都會(huì)記住你的映射,潛意識(shí)中你就會(huì) 按下那些映射按鍵。

insert模式

現(xiàn)在我們已經(jīng)知道如何在normal模式和visual模式下映射按鍵?,F(xiàn)在我們談?wù)刬nsert模式下的 映射方法。運(yùn)行如下命令:

:imap <c-d> dd

你可能猜想這個(gè)命令的作用是在insert模式下通過按鍵Ctrl+d刪除整行。這個(gè)映射很實(shí)用, 因?yàn)槟悴槐孛看味家獮榱藙h除某些行而切回到normal模式。

好的我們試一下。它并不如我們想象那般工作,而僅僅是在文件中添加了兩個(gè)d字符! 它壓根就沒用。

問題就在于Vim只按我們說的做。這個(gè)例子中,我們說:“當(dāng)我按下<c-d>時(shí),相當(dāng)于我 按了兩次d”。而當(dāng)你在insert模式下,按下兩次d的作用就是輸入兩個(gè)字符d。

要想讓這個(gè)映射按我們的期望執(zhí)行,我們需要更加明確的指令。修改映射并運(yùn)行如下命令:

:imap <c-d> <esc>dd

<esc>告訴Vim按下ESC按鍵,即退出insert模式。

現(xiàn)在再試試這個(gè)映射。它能夠正常工作,但是注意你是如何回到normal模式的。這是因?yàn)槲覀?告訴Vim<c-d>要退出insert模式并刪除一行,但是我們沒有告訴它再回到insert模式。

運(yùn)行如下命令,修復(fù)映射問題:

:imap <c-d> <esc>ddi

結(jié)尾的i告訴Vim進(jìn)入insert模式,至此我們的映射才最終完成。

練習(xí)

設(shè)置一個(gè)映射,當(dāng)你在insert模式時(shí),可以通過按下<c-u>將當(dāng)前光標(biāo)所在的單詞轉(zhuǎn)換成 大寫格式。每次我寫一個(gè)類似MAX_CONNECTIONS_ALLOWED這樣很長的常量時(shí)都能感覺到這個(gè) 映射的實(shí)用性。因?yàn)檫@樣我就可以以小寫的格式敲寫常量,然后用這個(gè)映射將其轉(zhuǎn)成大寫, 不必一直需要按著shift鍵。

將那個(gè)映射添加上到你的~/.vimrc文件中。

設(shè)置一個(gè)映射,當(dāng)你在?normal?模式時(shí),可以通過按下<c-u>將當(dāng)前光標(biāo)所在的單詞轉(zhuǎn)換成 大寫格式。這個(gè)映射和上面那個(gè)有點(diǎn)區(qū)別,因?yàn)槟惚仨氁M(jìn)入normal模式,也不需要結(jié)束時(shí) 切到insert模式。

將那個(gè)映射添加上到你的~/.vimrc文件中。

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)