五指操控Firefox的「仿Vim」擴充套件: Vimperator/Pentadactyl

這幾天都在試用一個超級犀利變態的Firefox擴充套件:Vimperator,能讓我們以超強編輯器Vim的編輯模式來操控Firefox。Vim是流行於Unix/Linux作業系統裡、或程式設計師們偏好使用的一種文字編輯器,主要以鍵盤的操作與輸入來進行文件的檢視與修改,因為雙手都在鍵盤上而大幅減少了鍵盤與滑鼠切換的次數,熟練以後就能快速的操作。當我們在不方便使用滑鼠的狀態下(例如坐在沙發或捷運上時),使用Vimperator就非常便利;可惜我太晚知道這個擴充,否則也不用自己以AutoHotkey寫了小工具(詳見AutoHotkey:在FireFox裡用鍵盤瀏覽網頁一文)。

最原始版本的Vim名稱是Vi(應該是代表Visual),Vim是Vi的加強版(Vi IMproved),我猜測Vimperator是取Vi與imperator的合體:Vi大將軍(imperator /ImpE'rBtL/,是大將軍;羅馬皇帝的意思,翻譯請見dict.tw)。

另外由Wikipedia看到了在今年9月原有的Vimperator開發團隊另立門戶而釋出了Vimperator的分支:Pentadactyl(/pZntE'dAktMl/ 五指的,五趾的),代表意義是「A Vim-like five-fingered interface for Firefox and other xulrunner-based apps」,像Vim的Firefox五指介面,可能是說透過Pentadactyl能讓你的五根手指頭在Firefox裡「鍵」步如飛吧。稍稍比較了主幹與分支版本後,我決定使用更新得較頻繁的Pentadactyl來使用。

我由Pentadactyl下載了比較新的版本來試用(http://dactyl.googlecode.com/files/pentadactyl-20101118.xpi),並且安裝到我的Firefox 3.6裡,以下是簡要的介紹。請注意所有的按鍵與指令都是大小寫嚴格區分的,b和B是兩個不同的功能。

瀏覽器畫面設定

安裝後第一次進入Firefox可不要被嚇到,怎麼畫面都不一樣了?首先用設定指令把畫面樣式變更回來:

  1. 輸入冒號(:)與set,空一格後再輸入go與=,接著是mTBnrs,最後按下〔Enter〕,功能表、工具列與書籤列等就會出現了。
    :set go=mTBnrs
    或
    :set guioptions=mTBnrs
  2. 冒號進入Pentadactyl的命令模式,在命令模式裡可以輸入多項命令,例如:set就是設定各式系統參數
  3. go是GUIOptions的縮寫,是用來設定圖形介面的選項
  4. GUIOptions能接受的參數有下面幾種:
    1. m是功能表
    2. T是工具列
    3. B是書籤列
    4. n是分頁編號,使用n參數的話分頁圖示後面會多出分頁的編號(如下圖分頁上的紅框);如果是N則是在分頁圖示疊上編號
    5. r是右側的垂直捲軸,l(小寫的L)是左側的捲軸,若用b則是顯示底部的水平捲軸
    6. s是最底部的狀態列
  5. 瀏覽器底部左側的綠框的+-?代表的意義是:
    1. +表示目前分頁還有下個網頁
    2. -表示是目前分頁歷史的第一頁
    3. ?表示本網頁被加入到書籤(我的最愛所以用心形符號 :-))
  6. 瀏覽器底部右側的黃框的[1/5]2%代表的意義是:
    1. [1/5]表示目前分頁是5個分頁裡的第一個分頁
    2. 2%表示目前顯示位置是在整個頁面的2%位置
  7. 設定好的選項必須用:mkp!寫入系統設定檔,設定檔存放於C:\Users\使用者\_pentadactylrc(Windows 7)或C:\Documents and Settings\使用者\_pentadactylrc(Windows XP)

Vimperator GUI options

頁面操作

在Pentadactyl裡的常用頁面操作整理如下:

按鍵 說明 其他相同按鍵
空白 向下一頁 同〔PgDn〕
Ctrl+B 向上一頁 同〔PgUp〕
j 向下一列 同〔↓〕
k 向上一列 同〔↑〕
h 向左一行 同〔←〕
l

(小寫的L)

向右一行 同〔→〕
Ctrl+O 回目前分頁歷史的上一頁面 同〔Alt+←〕
Ctrl+I 回目前分頁歷史的下一頁面 同〔Alt+→〕
y 複製目前網址到剪貼簿
/ 搜尋,在 / 後輸入要搜尋的文字,再按〔Enter〕開始搜尋,找到第一個符合的文字後:

  • 用n向下找第二個
  • 按N則往上找下一個
gg 到網頁最開頭 同〔Ctrl+Home〕
G 到網頁最末端 同〔Ctrl+End〕
gi 將游標移到頁面的第一個輸入欄位裡
d 關閉目前分頁
r 重新整理 同〔F5〕
M英數字 英數字是指小寫的a到z、A到Z、0到9等62個單個符號。M再加一個符號就能把目前的網址存入QuickMarks,例如目前網頁是http://www.google.com,按Mg將之存入QuickMarks,之後就能用gog或gng來開啟

以上按鍵中的Ctrl+B、Ctrl+O是組合按鍵,而為了減少按鍵數,我們可以用:map指令把〔Ctrl+B〕映射為〔v〕(或任何與預設按鍵不重覆的按鍵),設置後按〔v〕就等同於〔Ctrl+B〕(用<C-b>來表示),也就是往上一頁;要取消按鍵映射則用:unmap指令:

:map v <C-b>

" 以下取消v鍵的mapping
:unmap v

另外一個常用的按鍵映射命令是:noremap-不循環映射,表示某個按鍵不會重覆映射,如下例把往下一列的 j 鍵改成10個 j,即往下10列,如果不使用:noremap則會重覆映射而進入無窮迴圈:

:noremap j 10j

Pentadactyl的組合按鍵表示方法如下,知道按鍵表示式後才方便做map:

按鍵表示法 對應按鍵
<C-按鍵> 〔Ctrl+按鍵〕
<A-按鍵> 〔Alt+按鍵〕
<S-按鍵> 〔Shift+按鍵〕
<M-按鍵> 〔Win+按鍵〕

為了能完全控制Firefox的鍵盤輸入,Pentadactyl針對網頁裡的各個區域都能分別做:map設定。Pentadactyl有下列幾個模式,用:<模式代碼>map就能針對特定的模式做按鍵設定,例如:imap就是設定插入模式的映射(簡體中文的模式圖示參考請按這裡):

模式代碼 代表區域 說明
c 命令行模式(Command-line) 最底部的命令列
i 插入模式(Insert) 游標移入瀏覽器裡的輸入欄位時即進入插入模式,例如網址、搜尋欄位,或網頁內的輸入欄位
v Visual模式 選取文字後即進入Visual模式
n 一般模式(Normal) 一般的瀏覽模式
t TEXTAREA模式(Normal) 針對TextArea區域的特別模式

上面介紹過的:noremap其實就是:nnoremap與:vnoremap的組合,適用於一般模式(n)與Visual模式(v)。

鍵盤映射範例與說明

接著我們來做幾個鍵盤映射,修改操作以適應以前的操作習慣或減少按鍵次數:

按鍵 功能
Ctrl+F 原本Ctrl+F是向下捲動,用下列指令修改成Firefox預設的搜尋: 用<C-v>將按鍵直接交給Firefox來處理(這稱為Pass Through,就是按鍵直接穿越給Firefox處理)。以下指令中,跟在〔Ctrl+V〕後面的按鍵不會被Pentadactyl處理而是直接給Firefox執行,因此會在底部出現Firefox的搜尋對話窗:

:noremap <C-f> <C-v><c-f>
Ctrl+C 剪貼簿操作按鍵〔Ctrl+C〕、〔Ctrl+V〕等在Pentadactyl裡都有不同的用法,我們可以用以下映射來變更成慣用按鍵:

:noremap noremap <C-c> <C-v><C-c>
:cnoremap <C-c> <C-v><C-c>
:inoremap <C-c> <C-v><C-c>

Ctrl+C的處理我測試仍有些問題,必須按兩次才能正確複製,還在尋找解決方法

Ctrl+V 把〔Ctrl+V〕改成剪貼簿的貼上:

:noremap noremap <C-v> <C-v><C-v>
:cnoremap <C-v> <C-v><C-v>
:inoremap <C-v> <C-v><C-v>
Ctrl+A 把〔Ctrl+A〕改成全選:

:noremap noremap <C-a> <C-v><C-a>
:cnoremap <C-a> <C-v><C-a>
:inoremap <C-a> <C-v><C-a>
Ctrl+X 把〔Ctrl+X〕改成剪下:

:noremap noremap <C-x> <C-v><C-x>
:cnoremap <C-x> <C-v><C-x>
:inoremap <C-x> <C-v><C-x>
Ctrl+O 把返回歷史頁面的上一頁面由組合按鍵〔Ctrl+O〕改成逗點(,):

:noremap noremap , <C-o>
Ctrl+I 把返回歷史頁面的下一頁面由組合按鍵〔Ctrl+I〕改成點(.):

:noremap noremap . <C-i>

分頁操作

用鍵盤來開網頁比起滑鼠似乎有種說不出的快感,例如前面用M指令做好的QuickMarks,就能很快速的開啟:

指令 說明
go英數字 將設定好的QuickMarks對應的網址開啟在目前分頁
gn英數字 和上列用途相同,但開啟在新分頁
gt 切換到下一個分頁,要輸入兩個字母,我們可以〔Ctrl+N〕或者用:noremap c gt改用字母 c
gT 切換到上一個分頁,可以〔Ctrl+P〕或者用:noremap x gT改用字母 x
b 等於:buffer!指令,輸入分頁編號與〔Enter〕直接切換到指定分頁,也可以按〔Ctrl+號碼〕切換。其中〔Ctrl+6〕特別被設定成在前一分頁和目前分頁間來回切換的按鍵

用M指令是記錄目前分頁的網址,透過:qmark指令則可以直接指定網址,設定後同樣能用go與gn來開啟:

:qmark  英數字  網址

" 例如:
:qmark j  htp://jdev.tw/blog
:qmark p  http://www.plurk.com

要列出所有已經設定的QuickMarks只要使用:qmarks就可以了。輸入:qmarks時你可以發現Pentadactyl有自動完成的功能,輸入部份文字後在命令區上方會顯示符合的命令,按下〔Tab〕就會找出最符合的指令,因此用〔Tab〕的自動完成功能可以節省很多輸入的時間。

▼按〔Tab〕可以做自動完成

Pentadyctyl AutoComplete

開啟網頁的方法有很多種:

按鍵 指令 說明
o : open 網址 將網址開啟在目前分頁
t :tabopen 網址 將網址開啟在新分頁
w :winopen 網址 將網址開啟在新視窗
f 頁面上的連結會被標上號碼,再輸入號碼就會把網址開啟在目前分頁
F 頁面上的連結會被標上號碼,再輸入號碼就會把網址開啟在新分頁

▼用輸入號碼的方法開啟連結

Pentadactyl HyperLink

特定網址直接進入穿越模式

Google Reader與Gmail網站都提供了熱鍵,為了能繼續使用網站原有的按鍵,我們必須暫停Pentadactyl的處理,讓按鍵直接進入穿越模式,用Pentadactyl的AutoCommand觸發指令就能順利達成了:

:autocmd LocationChange (www|mail)\.google\.com/(reader|mail) -js modes.set(modes.PASS_THROUGH)

Pentadactyl小資訊

有了上面的簡單介紹應該就能順利的操作Pentadactyl了,更詳細的內容可以用:help指令來查詢。由Pentadactyl網站上看,也將推出Thunderbird電郵軟體的Vim介面,希望能盡快推出。

##

您可能也會有興趣的類似文章

簡睿

服務於軟體業的資訊老兵。興趣廣泛,學習力佳,好奇心強。

您可能也會喜歡…

7 個回應

  1. officx表示:

    这个扩展很强大但挺小众 谢谢您的分享

  2. 10-finger_browsing表示:

    pentadactyl(y) is a quite interesting name. Compared to its predecessor vimperator, pentadactyl is bleeding fast on firefox v4.0 beta. Actually, I’d like to rename penta-dactyl as deca-dactyl for 10-finger web surfing:-)

  3. adam表示:

    谢谢,您 的文章非常有用,学习了。

  4. 見人表示:

    個人傾向於「用輸入號碼的方法開啟連結」這種類型的鍵盤快捷鍵,以為這才是理想的鍵盤快捷鍵。有兩個特點:一,不用記快捷鍵;二,只用左手操作鍵盤,右手操作滑鼠。我沒有花時間研究Pentadactyl,因為用autohotkey就能滿足我的需求。研究了LabelControl這個ahk腳本就知道怎麼用了

  5. 簡睿表示:

    哇, 說是幾近「教科書」實在是不敢當, 我只是個Vi或Pentadactyl的入門者而已。
    希望有機會能再切磋與討論 :-)

  1. 2010/12/31

    […] 五指操控Firefox的「仿Vim」擴充套件: Vimperator/Pentadactyl :台湾简睿随笔的Pentadactyl文章,几乎可以是教科书了. Pentadactyl/Vimperator :VIM化的Firefox: 来自善用佳软的教程,全面而细致. Vimperator入门 : 一个人在路上写的Vimperator的,需要翻墙. 不折腾会死的博客 :这是我见过的最狂热的Vimperator粉丝,需要翻墙. 日本Vimperator插件主页 :有大量Vimperator的插件. […]

  2. 2013/01/09

    […] 更多詳細的用法可以參考其他人的文章,其實用到現在我也還是離不開滑鼠,不過裝了之後就當作多了許多好用的快捷鍵可以使用,也是挺不錯的。 […]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *