iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
自我挑戰組

用 vim 打造屬於自己的 IDE系列 第 12

Day 12 用 vim script 打造專屬自己的快捷鍵

  • 分享至 

  • xImage
  •  

相信大家在使用 IDE 的時候,都特別依賴已經幫我們寫好的快捷鍵 (ctrl + f 搜尋啊~ctrl + F 全域搜尋嗄~),當然之前我們也提到過 vim 的快捷鍵 (雖然對強大的 vim 來說那只是冰山一角~),只不過對於 vim 可以高度客製化的特性來說還是差得遠呢~

所以今天我們就來教大家,怎麼在 vim 的設定底下自己做幾個快捷鍵吧~

Mapping Key

vim 底下宣告新的快捷鍵使用的是 map 這個指令,最基本的語法長這樣:

:map [key] [command]

就是快捷鍵 (key) 對應到預期執行的指令 (command)。

我們可以在 Command-line Mode:map 來查看所有的快捷鍵對應:

:map! 則是只列出 Insert ModeCommand-line Mode 的快捷鍵:

模式

咦?不是要講快捷鍵嗎?怎麼又講回模式了?

...

因為跟其他 IDE 不同的是,快捷鍵會根據模式的不同產生不一樣的效應,也就是說~你可以設定 ctrl + fVisual 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 遞歸

假如你已經有一個寫好的快捷鍵了,又想要用另一個快捷鍵達成相同的功能呢?

:那還不簡單,我們就再把指令重寫一次就好!

那假如這個函式日後進行了更改,結果你沒改到另一個快捷鍵呢?

:... 那就用全域取代

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 底下大玩快捷鍵了呢!


上一篇
Day 11 用 NeoVim 安裝套件
下一篇
Day 13 用 vim script 客製化套件 (一)
系列文
用 vim 打造屬於自己的 IDE19
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言