どうも、Vimperator Advent Calendar 2012主催の天井冴太です。1日目です。
さて何を書こうかとしばらく思案しましたが、VimperatorのAdvent Calendarは私が知る限りでは初めてだという事で、ならばやはり最初は紹介記事にするべきだろうと思い立った次第です。
タイトルは、過去大量のはてブを獲得していた【PC作業効率化】Firefox使いなのにkeyconfigアドオンを導入していない?そんな馬鹿な! | 世界をぐるりとBusideaのパクりオマージュです。
『【PC作業効率化】Firefox使いなのにVimperatorアドオンを導入していない?そんな馬鹿な!』というエントリを後で書……かない。
なんてはてブのコメントで書いたネタの実現ですね。3年越しの。
それでは、以下少々長くなりますが、是非ともお目を通して頂きたく思います。
Vimperatorとはなにか
Vimperatorは、ウェブブラウジングのほとんどをキーボードのみで済ませられるようになる、Firefox用の強力なアドオンだ。その操作法は、古くから沢山の人々を魅惑して止まないVimというテキストエディタから来ている。
いかに現在のwebがマウスなどのポインティングデバイスを基本としたデザインがなされているといっても、文字入力に使われるのは昔も今も替わらずキーボードである(勿論、音声入力などの新規デバイスも登場してきてはいるが)。
検索エンジンではキーボードから文字列入力を行い、検索結果からリンクをマウスでクリックしページを辿っていき、望む結果が得られなければ、また検索エンジンのページからキーボードで文字入力……或いは、BBSやチャット、blog等での文字入力はキーボードで、投稿ボタンはマウスで押す……キーボードとマウスの間を手が往復するのは何とも非効率ではないか。どちらかに統一するべきだ。それを実現する1つの――そして、私が知る限りでは最良の――ツールがこのVimperatorである。
導入法
他のFirefoxアドオンと同様、Add-ons for Firefoxから入手出来る。ヘルプ(後述)は英語だが、有志による日本語版ヘルプも別に用意されているのでそれも導入しても良いだろう。
Vimperatorをインストールし、Firefoxを再起動すると、Firefoxのウィンドウが以下のように変更される。
アドオンバーが表示され、更にその下、ウィンドウ最下部に、見慣れない横長領域が追加される。以前のバージョンのVimperatorはその他にもいろいろと変更し、生半可な知識ではVimperatorの削除さえ出来ない状態に追い込まれてしまう恐ろしさであったが、随分丸くなったものである(他のblogでそんな感じの事が書いてあったら、「ああ昔は大変だったんだな」と思って欲しい)。
webページを開く、タブを開く、タブを閉じる
先ずは何かwebページを――ここでは試しにYahoo! JAPANを開いてみよう。
現在(即ち、Vimperator起動直後。Firefoxのホームページの設定を変えていない事を前提としている)、Firefoxスタートページ(about:home)の検索語句入力欄にフォーカスが合っており、このままでは入力欄へのテキスト入力となってしまうので、先ずはフォーカスを外す。ウィンドウ左下に緑の背景で"INSERT"と書かれているのを確認した上で、ESCキーを押す。
"INSERT"の文字が消えた事を確認し、また、CapsLockされていない事を確認した上で、"o"キーを押す。
すると、ウィンドウ下部の領域が広がり、一番下には右向き三角と"open
"の文字が入力される。この状態で、Yahoo! JAPANのURLである"http://www.yahoo.co.jp/"を入力しEnterキーを押すと、Yahoo! JAPANのページに移動出来る。
この時、ウィンドウ右下に"http://www.yahoo.co.jp/"と、Yahoo! JAPANのURLが表示されている事を確認しておこう。現在開いているページのURLはここに表示される。
次は、新規にタブを開き、そこに何処かのwebページを開いてみよう。
今度は"t"キーを押す。すると、先程の"o"キーの時と同じような表示が現れたはずだ。ただ一つ、最下部の文句が"open
"ではなく"tabopen
"となっている以外は。
ここに新規タブで開きたいページ――ここでは仮に、はてなブックマーク(http://b.hatena.ne.jp/)のURLを入力してEnter。望み通り新規タブではてなブックマークのページを開く事が出来る。
タブが開けたなら今度は閉じてみる。"d"キーを押すと、現在開いているタブを閉じる事が出来る。
ここまでで出てきた"o"、"t"、"d"のような、所謂ショートカットキーのようなものを、Vimperatorではkey mapping(或いは単にmapping)と呼ぶ。key mappingは大文字と小文字を区別するので注意が必要だ(もし思うとおりに動かないという場合は、CapsLockの状態を確認してみよう)。例えば、"o"と"O"、"t"と"T"はそれぞれ別の挙動をする(どのような挙動になるかは実際にやってみて確認しよう!)。
ページ中の任意のリンクを開く/ボタンを押す
さて、上記を行ったならば、現在Firefox(Vimperator)にはYahoo! JAPANを開いているタブが1つだけ存在する筈だ。ではYahoo! JAPANで何か検索してみる。
先ずは検索語句入力欄にフォーカスを合わせる必要が有る。左下に"INSERT"の文字がない事を確認して(在るならESCキーを押し消した上で)"f"を入力。すると、次のような変化が在る筈だ。
- ページ中の全てのリンク、ボタン、入力欄左上に赤背景白文字の数字が表示される。
- ページ中の全てのリンク、入力欄の背景色が緑、或いは黄色に変わる。
- ウィンドウ左下が紫背景の白文字で"Follow hint"と表示され、その横に右向き三角が表示される。
この状態はHint modeと呼び、Vimperatorに複数存在する状態(mode)の一つだ。この状態で選択したいリンク、ボタン、入力欄(など)の数字を入力すると、そのリンクやボタンをクリックしたり、入力欄にフォーカスを移したりする事が出来る。緑背景はその状態で確定(Enterキー押下)した時に選ばれる物、黄背景はそれ以外の候補だ。
ここでは入力欄にフォーカスを合わせたいので、入力欄の上に現れる物と同じ"20"を入力する(この数字は、ページ上の表示によって変わってくる。あくまで「20個目の候補」の意でしかなく、ページのデザインが変わった場合などに別の数字になる事がある)。入力欄にフォーカスが移った筈だ。
入力欄にフォーカスが移った為、左下の表示は"INSERT"になっている。既に感づいている人も居るだろうが、これもVimperatorのmodeの一つである。Insert modeと言い、テキスト入力欄やチェックボックスなどにフォーカスを合わせた時に移行する。その名の通り、何かを「入力」する為のmodeである。尚、左下に何も表示されていない状態はNormal modeと呼ぶ。
さて、検索の話に戻って、ここでは"Vimperator"という語句を検索してみよう。Insert modeでの文字入力方法は通常のFirefoxと何ら変わらない。
目当ての情報を探すまで、検索結果一覧のタブは残しておきたい。一覧されたページのリンクを新規タブで開くにはどうすればよいか。"f"の替わりに"F"(大文字のF。Shiftキーを押しながら"f"キー)というkey mappingを使う。
いや、一覧から複数のめぼしいページをそれぞれ新規タブで一度に開きたい。一つずつ"F"で開いていくのは面倒だ。そういう場合は";F"と入力する(";"キー、大文字のFの順に入力)。リンクを選ぶ数字を入力すると、そのページがバックグラウンドで開かれ、なおかつHint modeは終了しない。1つ目の数字、2つ目の数字、3つ目の数字……と連続して開いていく事が可能だ。必要なだけページを開いたら、ESCキーでNormal modeに戻る。
";"で始まるHint modeはExtended hint modeと呼ばれ、他にも特殊な用途に使える物が揃っている。
ページのスクロール
1つのwebページがブラウザのウィンドウ内に収まる事は稀だ。現在表示されている外を見るには、スクロールさせる必要が有る。
Vimperatorでは複数のスクロール用key mappingが用意されている。
先ずは、一番移動量の少ない方法。"h"、"j"、"k"、"l"のキーを用いる。右手をキーボードのホームポジションに置いた時、人差し指の位置に来る"j"が下移動、その直ぐ横の中指の"k"が上移動、それらを挟む2つのキーの内、左側の"h"で左に、右側の"l"で右にスクロール出来る。ホームポジションから殆ど手を動かさずに済む為、非常に使いやすい。
他にも、1ウィンドウ高分スクロールするCtrl+b、Ctrl+f等が存在する。しかし、1ウィンドウ高分の移動であれば、Firefoxと同じスペースキー、Shift+スペースキーの方が使いやすいだろう。
ページの最後まで閲覧した後で最初に戻りたい、なんて事も有る。その時は"gg"。逆に、ページ末尾まで一気にスクロールするには"G"を使う。
タブの切り替え、タブの復活
"F"や";F"で選択したタブは背面で開くので、閲覧する為にはタブを切り替えなければならない。Vimperatorにはさまざまなタブ切り替え方法が用意されている。
直ぐ右隣のタブに切り替えたい場合はgt、左隣ならばgTと入力する。2つ隣、3つ隣……という場合は、2gt、3gtのように入力すればいい。
他、一番最初のタブならg0、最後のタブならg$、直前に見ていたタブにはCtrl+^で切り替える事が出来る。
もし、切り替え先が幾つ目のタブなのかハッキリ分かっているならば、幾つ目のタブかの数値を入力した後に"b"で移動出来る。
現在そのウィンドウで開いているタブの一覧は":ls"と入力しEnterを押す事でリストアップ出来る。尚、:lsのように、":"で始まり最後にEnterで確定する物はEx commandと呼ばれ、さまざまな機能を持つコマンドが在る。"o"や"t"のkey mappingで入力される:open
や:tabopen
も仲間だ。中には引数を取る物も有り、きめ細かなVimperatorの操作を行う際に欠かせない。
複数開いたタブを順に見ていって、要らないタブは"d"で閉じる……ああしまった、今のは取っておくべきだった。どうしよう?
直前に開いていたタブは、"u"で開き直す事が出来る。2つ前に閉じたタブは2u、3つ前なら3uで元に戻せる。
幾つ前に閉じたか判らない場合は":undo
" Ex commandを使うと良い。":undo "とコマンド名の後に空白を入れると、直近5件が候補としてリストアップされる。そのままTabキーを復活させたいページまで連打するか、リストのインデックス番号を入力すれば、対象のページを復活させる事が出来る。
ページ内を検索
検索した結果開いたページ、でもそのページ中には複数の内容が書かれているというのも良くある話。自分に必要な情報を探し出さなければ。
ページ内を検索しよう。
ページ内を検索するには、"/"を使う。"/"キーを押すとウィンドウ下部に"Find"と書かれた入力欄が現れる。そこに検索したい語句を入力する。デフォルトではインクリメンタルサーチが有効なので、文字入力毎に検索語句に合う場所に移動出来る。また、検索語句をEnterで確定させると、ページ中の他のヒット位置がハイライト表示される(ハイライト表示を消すには":nohlsearch
"というEx commandを使う)。
次のヒット位置に飛ぶには"n"を入力する。"n"を押す毎に次の候補の位置に飛ぶ。逆に戻りたい時は"N"を入力する。
"/"はページ中を上から下に向かって順に検索していくが、逆に下から上に検索する手段も用意されており、"?"を使う。検索語句入力欄の文句が"Find backwards"となる筈だ。同じように"n"、"N"で前後の検索位置に移動出来る。
ページをブックマークする
有益なページが見つかった! ブックマークしておこう!
ページをブックマークするには":bmark
"というEx commandを用いる。":bmark -title=(タイトル) -keyword=(キーワード) -tags=(","区切りのタグのリスト) -folder=(フォルダパス) (URL)
"の形式で用いる。各引数は省略する事が出来、また、順不同だ。もっとも、"a"というkey mappingで、現在のタブのページを-title引数及びURLが補完された状態の:bmark
コマンドが自動入力出来るので、そのままEnterを押すのが一番簡単であろう。
履歴を戻る/進む
所謂「戻るボタン」「進むボタン」と同等の事をするには、それぞれ"H"、"L"を用いる。2つ前、3つ前に戻りたい、進みたいという場合は2H、3Lなどと入力する。
戻る為に":back
"、進む為に":forward
"というEx commandも用意されている。こちらは候補がリストアップされるので、「いくつ戻れば(進めば)良いのか判らない」という時に重宝するだろう。
高度な:open
、:tabopen
の使い方
:open
や:tabopen
を入力した際に、"Search Keywords"、"Smart Completions"、"Filename"という3種類のリストが表示される事に気づいているだろうか。
これはそれぞれ、ブックマークしたページのキーワード、ブックマークや閲覧履歴上のページ、ローカルディスク上のファイル一覧の補完候補だ。:open
や:tabopen
の後に入力された文字列にヒットする候補がリストアップされる。
例えば、続けて"www.google.co.jp/search"と入力すれば、今まで閲覧したGoogle検索の結果一覧ページがリストアップされる。
絞り込みは複数の文字列を利用出来るので、例えば"twitter AmaiSaeta"で、今までFirefoxで閲覧した私のtweetをリストアップ出来る。
TABキーを押して候補から一つ選ぶ事で、そのページを開く事が出来る。
webで検索を行う時に、わざわざ検索エンジンのサイトを開いて、検索語句入植欄にHint modeで移動して……とやるのは面倒だ。:open
や:tabopen
は、入力された語句がURLかどうかを判定し、もしそうでなく、且つブックマークのキーワードともローカルストレージ上のファイルやフォルダの名前とも異なる場合、それを検索語句と見なしてweb検索を行う。試しに、":open firefox
"とでも入力してみよう。
Vimperatorを終了させる
Vimperator(Firefox)を終了させる際は、"ZZ"或いは"ZQ"を用いる。
"ZZ"は現在のセッション情報、即ち、開いているタブ、各タブの閲覧履歴の情報を保持する。次に起動した時には自動的にその状態に戻る。
対して"ZQ"はセッション情報を保持しない。現在開いているタブ全てを閉じてしまいたい時に使うと良いだろう。
Vimperatorをカスタマイズする
何らかのツールを使っていく内に不満に思う点が出てくる事は多々在る。Vimperatorでもそれは例外ではないだろう。
だが安心されよ。Vimperatorは自分でカスタマイズする事が可能なのだ。
Vimperatorの設定を変更するには、":set
"或いは":setlocal
"というEx commandを使う。前者はVimperator全体、後者は現在のタブのみに対する変更だ。ただし、どちらか片方にしか作用しない設定項目もあるので注意。
どのように設定するかの具体的な例とする為に、2つ設定例を示す。勿論、それら以外にも沢山の設定項目が存在する。
前述したHint modeにおいて、リンクやボタンなどを選択する際には数字を使った。しかし、数字は0から9までの10種類しかなく、リンクの多いページだと、対象を選択するのにより多くの入力が必要となってしまう。アルファベットを使うように変更するには以下のようにする。
:set hintchars="abcdefghijklmnopqrstuvwxyz"
"/"、"?"でのページ内検索では、大文字小文字の区別はしない。これが不満な人が居るかも知れない。区別するように変更してみよう。
:set noignorecase
逆に有効化したい場合は以下のようにする。
:set ignorecase
見ての通り、:set
の引数としてオプション名とその値を"=
"記号で区切って指定する。'ignorecase
'のように有無効の切り替え式の物の場合は、そのままオプション名を書くと設定の有効化、頭に"no
"と付けると無効化として働く。
なお、一度設定した内容を元に戻したい場合はオプション名末尾に"&
"記号を付ける。例えば、'hintchars
'を元の数字のみに戻すには以下の通り。
:set hintchars&
Vimperatorをもっとカスタマイズする
Vimperatorには沢山のkey mappingやEx commandが用意されているが、それらを自分で独自に追加する事が出来る。
先ずは好みのkey mappingを定義する方法。":map
"というEx commandを使う。
:map <C-s> :open 天井冴太
:map
の第1引数に新たに定義したいkey mapping、第2引数にそのkey mappingの挙動を入力する。
<C-s>
は「Ctrlキーを押しながらs」、<CR>
はEnterキー(carriage return)の事だ。CtrlキーやShiftキー、Altキー、Enter、Tab、上下左右の方向キー等、印字不可能な文字はこのように"<"~">"に囲まれた記法を用いる。
:map
は再帰的な展開を行う。例えば以下の、jを通常の3倍早くスクロールさせる意図のkey mappingは定義出来るが、使うとVimperatorを暴走させてしまう。第2引数の"j
"を、さらに"jjj
"に展開して……と無限ループしてしまう為だ。
:map j jjj
この場合は:noremap
を用いる。:noremap
は再帰的な展開を行わない:map Ex commandだ。
:noremap j jjj
次に独自のEx commandを定義してみよう。Ex commandの定義には":command
"というEx commandを用いる。
Ex commandは引数を取れる点がkey mappingと比べた場合の長所なので、その特色を活かした物を考えてみる。このblog(即ち、http://amaisaeta.seesaa.net/下)から、任意の語句を含むページを検索する"mysearch" Ex commandを作ってみる。
:command -nargs=+ mysearch open site:amaisaeta.seesaa.net <args>
引数"-nargs=
"は定義するEx commandが取る引数の数を指定しており、ここでは"+
"(1つ以上)を指定した。他にも"*
"(0個以上)、"?
"(0個か1個)、"0
"(引数無し)、"1
"(1個だけ)が使用出来る。
2つ目が定義するEx command名。その後がそのEx commandで行う内容だ。"<args>"はmysearchに渡した引数で置換される。
以降、":mysearch
"コマンドを使う事が出来るようになる。例えば":mysearch Vimperator Firefox
"で、このblog内の"Vimperator"と"Firefox"という単語を含むページをGoogleで検索出来る(検索エンジンは既定の設定のままの場合)。
Vimperatorの設定を永続化する。
今まで:set
や:map
や:command
でさまざまなカスタマイズを行ってきたが、実はこれらの設定は「このとき限り有効」である。Vimperator(Firefox)を再起動させるときれいサッパリ消えてしまう。流石にそれでは不便なので、何時も使う設定は永続化させよう。
Vimperatorは、起動時にユーザーフォルダ(Linux等では"~"でアクセス出来るフォルダ、Windowsは"\Documents and Settings\(ユーザー名)"や"\Users\(ユーザー名)"というパスのフォルダ)に在る".vimperatorrc"或いは"_vimperatorrc"というファイル(以降は便宜上".vimperator"に表記を統一する)を読み、そこに列挙されたEX commandを自動実行する。
":mkvimperatorrc
"というEx commandを使えば、今まで設定したオプションやkey mappingやEx commandを行う.vimperatorrcがユーザーフォルダ直下に生成される。勿論、このEx commandを使わず自分でファイルを作っても良い。
以降、設定を追加削除する場合は、先ず起動しているVimperatorで試してみて、気に入ったら.vimperatorrcに追記する(或いはその度に":mkvimperatorrc!
"で上書き生成する)という流れになる。
Vimperatorをもっともっとカスタマイズする
一連のEx commandをファイルに書き出し、それを読み込めるという事は、他人が用意したファイルを使う事が出来るという事でもある。
Vimperatorにはプラグイン機構が存在する。Vimperatorを拡張するプラグインを、様々なユーザーが作り、公開している。
プラグインは、(.vimperatorrcのような)Ex commandを列挙したファイル(拡張子.vimp。ただし、殆ど見ない)や、Vimperatorを操作する専用の命令群を使用したJavaScriptファイル(拡張子.js。こちらの方がメジャー)として提供される。
これらのプラグインファイルは、ホームフォルダのvimperatorフォルダ(Vimperator初回起動時に自動生成される)の下のpluginフォルダに格納する。その後Vimperatorを再起動するか、":source
"Ex commandで直接読み込むと使えるようになる。
ユーザー個々人がそれぞれ独自に公開している場合も多いが、集中管理するリポジトリも存在する。例えばVimperator公式や、非公式だが日本ユーザー中心のVimprなど。
以下にプラグインの一例を示す。
- autoreload.2.js
- 一定時間毎にページを自動リロードする"
:autoreload
"というEx commandを使えるようになる。 - noscript.js
- NoScript Firefoxアドオンを操作する"
:noscript
"を使えるようになる。 - auto-focus-frame.js
- フレームを使ったwebページを開いた時に、自動的に最も大きなフレームにフォーカスを合わせるようになる。
- stella.js
- ニコニコ動画、YouTube、Vimeoの動画プレイヤーを操作出来る各種Ex commandを追加。
- appendAnchor.js
- webページ中のリンクになっていないURLをリンクにする。
- feedSomeKeys_3.js
- 任意のキー入力をVimperatorで処理せず閲覧中のwebページへ渡すよう指定する"
:fmap
"(及びその関連Ex command)を追加する。キーボードショートカット機能を提供しているwebページ(例えばGmailなど)で重宝する。
幾つかのプラグインでは、その設定の為に特別な変数を必要とする。そのような変数は、":let
"というEx commandで設定する事が出来る。
ヘルプを引く
Vimperatorのさまざまな機能の詳細を知りたくなった場合、用意されているヘルプが役に立つだろう。Vimperatorのヘルプは":help
"というEx commandで参照出来る。
":help
"の引数として調べたいオプションやkey mapping、commandの名称を入れると、それについての記述を直接参照する事が出来る。
第三者が公開しているプラグインでも、:help
に拠るヘルプ参照に対応している物が多い。
Vimperatorの弱点
webブラウジングの強力な友であるVimperatorだが、弱点も存在する。如何にVimperatorを薦める記事だとはいえ、欠点にも言及しないと不公平というものだ。
第1に、ブラウザプラグインを操作出来ない点だ。例えばFlashやSilverlightで構築されている物がそれに当たる。最も、昨今の風潮はそれらから所謂HTML5を利用する方向に移行しているので、困る事はだんだん少なくなっていくだろう。
第2に、擬似的なボタンやリンクへの対応が難しい点だ。「擬似的なボタンやリンク」とは、(少々技術的な話になってしまうが)HTMLのa
要素やinput
要素、button
要素等を用いていない物の事だ。そもそも、そのような擬似的なボタンやリンクを用いているwebデザイナ/デベロッパは二流三流なのでさっさと死滅して欲しいところだが……
最も、こちらは面倒ではあるものの、解決法が存在する。'hinttags
'及び'extendedhinttags
'両オプションを設定する事だ。対象のページのHTMLを読み、擬似ボタンや擬似リンクとなっている要素を指すXPath式を両オプションに追加する。そうすれば、以降その要素をHint modeで選択する事が出来るようになる。
Vimperatorはまだまだ深い……
さて、今までいろいろ書いてきたが、それらはVimperatorの機能の一部でしかない。他にもさまざまな機能が存在する。また、今まで紹介してきたものの中にも、触れていない能力を持つ物が在る。紹介していないプラグインも在る。正に「Firefox使いなのにVimperatorを導入していない?そんな馬鹿な!」と言えるだけのポテンシャルを持ったアドオンである。
是非とも:help
を、或いはGoogle等web検索を活用して欲しい。また、以下のようなコミュニティを覗いてみる事も薦める。
- vimperator labs - Google グループ
- Vimperator公式のML。英語によるやりとりだが、作者であるmartin Stubenschrott氏も参加している。
- Vimperator - Lingr
- 日本人のVimperatorユーザーが集うwebチャット。このVimperator Advent Calendarの発端はここだったりする。
- 2ちゃんねるのVimperatorスレ
- ソフトウェア板に在る。2ちゃんねるのスレは1000レスで終了し(需要があれば)別スレになってしまうので、Vimperatorスレ自体のURLを挙げる事は避ける。
- IRCの#vimperatorチャンネル
- 公式サイトの記述に拠ると在るらしい。筆者はIRCに不案内な為良く分からないが……
この記事が、Vimperatorのユーザーを増やす一助となれば幸いである。
Vimperatorでハッピーなwebライフを!
さて、こんなところでVimperator Advent Calendar 2012 第1日目の記事を終えたいと思います。2日目の担当は、大量のVimperator pluginの生みの親である「目が常時輝いているネコ」anekosさんです(お世話になってます!)。バトンタッチ!!
宣伝
12月になりVimperator Advent Calendar 2012はスタートしましたが、参加者数は未だ定員には達していません。まだまだ参加者募集中です。
Vimperatorユーザーの皆様には是非是非参加して欲しいと思います。
今回の記事を読んでVimperatorに興味を持った人も、Vimperator導入の顛末や、数日使ってみてのVimperatorに対する不平不満等々書いてみては如何でしょうか。
詳細は以下ページにて。
Vimperator Advent Calendar 2012 : ATND
:map :open 天井冴太
だけで、が抜けちゃってます。
不等号の文字実体参照への変換し忘れのようです。