W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
上一章中我們談?wù)摿巳绾卧赩im中映射按鍵。我們使用的命令map
在normal模式下工作。 如果閱讀本章之前你自己已經(jīng)折騰了,可能會注意到這個映射在visual模式一樣工作。
你可以使用nmap
、vmap
和imap
命令分別指定映射僅在normal、visual、insert模式有效。
執(zhí)行如下命令:
:nmap \ dd
在normal模式下,按下\
。Vim會刪除當(dāng)前行。
現(xiàn)在進入Visual模式,再次按下\
。什么都不會發(fā)生,因為我們告訴了Vim這個映射僅在normal 模式下工作(同時\
的默認行為是什么都不做)。
運行如下命令:
:vmap \ U
進入visual模式并選中一些文字,按下\
。Vim將把選中文本轉(zhuǎn)換成大寫格式。
分別在normal模式和visual模式測試\
按鍵,注意不同模式下的效應(yīng)。
起初,將同樣的按鍵根據(jù)當(dāng)前模式的不同映射到不同的功能聽起來很可怕。為什么每次按下 那個鍵之前都要停下想想我們現(xiàn)在是在什么模式?那樣是不是更浪費時間?
實踐中我們發(fā)現(xiàn)那真不是個問題。一旦你經(jīng)常使用Vim,你就不會在意你按下的鍵了。 你會想“刪除一行”,而不是“按`dd·”。你的手指和大腦都會記住你的映射,潛意識中你就會 按下那些映射按鍵。
現(xiàn)在我們已經(jīng)知道如何在normal模式和visual模式下映射按鍵。現(xiàn)在我們談?wù)刬nsert模式下的 映射方法。運行如下命令:
:imap <c-d> dd
你可能猜想這個命令的作用是在insert模式下通過按鍵Ctrl+d
刪除整行。這個映射很實用, 因為你不必每次都要為了刪除某些行而切回到normal模式。
好的我們試一下。它并不如我們想象那般工作,而僅僅是在文件中添加了兩個d
字符! 它壓根就沒用。
問題就在于Vim只按我們說的做。這個例子中,我們說:“當(dāng)我按下<c-d>
時,相當(dāng)于我 按了兩次d
”。而當(dāng)你在insert模式下,按下兩次d
的作用就是輸入兩個字符d
。
要想讓這個映射按我們的期望執(zhí)行,我們需要更加明確的指令。修改映射并運行如下命令:
:imap <c-d> <esc>dd
<esc>
告訴Vim按下ESC按鍵,即退出insert模式。
現(xiàn)在再試試這個映射。它能夠正常工作,但是注意你是如何回到normal模式的。這是因為我們 告訴Vim<c-d>
要退出insert模式并刪除一行,但是我們沒有告訴它再回到insert模式。
運行如下命令,修復(fù)映射問題:
:imap <c-d> <esc>ddi
結(jié)尾的i
告訴Vim進入insert模式,至此我們的映射才最終完成。
設(shè)置一個映射,當(dāng)你在insert模式時,可以通過按下<c-u>
將當(dāng)前光標所在的單詞轉(zhuǎn)換成 大寫格式。每次我寫一個類似MAX_CONNECTIONS_ALLOWED
這樣很長的常量時都能感覺到這個 映射的實用性。因為這樣我就可以以小寫的格式敲寫常量,然后用這個映射將其轉(zhuǎn)成大寫, 不必一直需要按著shift鍵。
將那個映射添加上到你的~/.vimrc
文件中。
設(shè)置一個映射,當(dāng)你在?normal?模式時,可以通過按下<c-u>
將當(dāng)前光標所在的單詞轉(zhuǎn)換成 大寫格式。這個映射和上面那個有點區(qū)別,因為你必須要進入normal模式,也不需要結(jié)束時 切到insert模式。
將那個映射添加上到你的~/.vimrc
文件中。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: