相信大家在使用 IDE 的時候,都特別依賴已經幫我們寫好的快捷鍵 (ctrl
+ f
搜尋啊~ctrl
+ F
全域搜尋嗄~),當然之前我們也提到過 vim
的快捷鍵 (雖然對強大的 vim
來說那只是冰山一角~),只不過對於 vim
可以高度客製化的特性來說還是差得遠呢~
所以今天我們就來教大家,怎麼在 vim
的設定底下自己做幾個快捷鍵吧~
在 vim
底下宣告新的快捷鍵使用的是 map
這個指令,最基本的語法長這樣:
:map [key] [command]
就是快捷鍵 (key
) 對應到預期執行的指令 (command
)。
我們可以在 Command-line Mode
下 :map
來查看所有的快捷鍵對應:
而 :map!
則是只列出 Insert Mode
與 Command-line Mode
的快捷鍵:
咦?不是要講快捷鍵嗎?怎麼又講回模式了?
...
因為跟其他 IDE 不同的是,快捷鍵會根據模式的不同產生不一樣的效應,也就是說~你可以設定 ctrl
+ f
在 Visual Mode
下只搜尋選取的區域,也能在 Normal Mode
下搜尋整個檔案~
而在不同模式下要設定不同的快捷鍵,只需要在 map
前面增加模式的代碼就好囉!(不特別指定模式則只需要 map
):
:nmap [key] [command]
像這樣就是在 Normal Mode
下才生效的快捷鍵~
這邊提供一張表給各位:
指令 | 模式 |
---|---|
:nmap |
Normal Mode |
:imap |
Insert Mode |
:vmap |
Visual Mode & Select Mode |
:smap |
Select Mode |
:xmap |
Visual Mode |
:cmap |
Command-line Mode |
:omap |
Operator Pending Mode |
假如你已經有一個寫好的快捷鍵了,又想要用另一個快捷鍵達成相同的功能呢?
:那還不簡單,我們就再把指令重寫一次就好!
那假如這個函式日後進行了更改,結果你沒改到另一個快捷鍵呢?
:... 那就用全域取代
recursive 提供我們用巢狀的方法去執行指令,假如你宣告的快捷鍵對應到的是另一個快捷鍵,那麼 vim
就會用此方法幫我們挖相依的快捷鍵~
不過如果你不喜歡這個功能怎麼辦?那你就關掉vim這個功能吧:
:nnoremap [key] [command]
此為在 Normal Mode
下對應一個非遞歸的快捷鍵。
既然可以設定,那就肯定可以取消設定~
:unmap
最後我們來實作一個快捷鍵吧!我想要按下空白鍵就可以折疊 & 展開這段的程式碼:
nnoremap <space> za <CR>
我們在 Day 04 說過 za
就是折疊 & 展開區塊的快捷鍵,所以這段的意思是:
在 Normal Mode
下按下 <space>
空白鍵,就幫我執行 za <CR>
的指令,並且不要遞歸執行
而 <CR>
就是按下 Enter 鍵,讓 za
這個指令生效~
太好了今天又可以在 vim
底下大玩快捷鍵了呢!