普段はブラウザはFirefoxを使っていますが、 一番の理由は Vimperator というVimライク(+More)な動作をFirefoxで再現してくれるプラグインがあるからです。
Google Chromeの方にもいくつかそういったものはありましたが、
単にh/j/k/l
で上下左右に移動できるなど、キーマップをしているだけ
だったりしたのでダメでしたが、
最近目についたcVimというプラグインが
それなりに色々出来そうだったので試してみました。
- cVim
- cVimrc
- cVimrc: Syncの罠
- VimperatorにあってcVimにないもの
- cVimを使わずにGoogle ChromeでVim
- FirefoxのVimperatorについて
cVim
cVim - Chrome ウェブストア: https://chrome.google.com/webstore/detail/cvim/ihlenndgcmojhcghmfjfneahoeklbjjh
cVimはGoogle Chromeのプラグインです。
インストールすると、k/jで上下にスクロールしたり 出来る様になります。
それからVimperatorでも実装されてるHit-a-Hint機能 (fを押した時に画面にあるリンクにアルファベットや数字を割り当てて それを押すことでリンクに飛べる機能)も実装されています。
コマンドライン機能もあって、コマンドを:を押してから 入力することでコマンドを実行することも出来ます。
一番よさげだと思ったのは、設定ファイルが.vimrcみたいに書けるところです。
Vimperatorでも~/.vimperatorrcというファイルにmap
等Vimと同様の
キーマップ設定が出来てそれが便利でしたが、
cVimでも同じ様な事が出来ます。
cVimrc
cVimの設定はツールバーに追加されるcVimのアイコンからSettings に行ったりすることで開かれる設定ページで行います。
cVimrcのパートとCSSを変更するパートにわかれていますが、 cVimrcのパートはGistにあるものを同期して使うことが出来ます。
ただし、今のところこの同期は取ってくるだけの一方通行です。
取り敢えず自分で作ってみたのがこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
|
https://gist.github.com/rcmdnk/2f7d0a95b97e4a47b702
https://gist.github.com/rcmdnk/2f7d0a95b97e4a47b702
とSync cVimrc with GitHub Gistの欄にコピペして
Syncボタンを押せばすぐに使えるはずです。
cVimのGitHubの README を参照して、 後は自分のvimperatorrcでやってるキーマップなどを取ってきています。
rcmdnk/dotfiles/.vimperatorrc: https://github.com/rcmdnk/dotfiles/blob/master/.vimperatorrc
散りあえず最初の方の設定は適当に。
blacklists
の設定でcVimを無効にするページを指定できます(上の例ではGmailのページ)。
ここではすべてのキーを無効にしてますが、READMEにもあるように
指定したキーだけ無効にすることも出来ます。
後のSettingsにある項目は好みで。
Vimperatorと同様に嬉しいのがqmarksの機能を持ってる点。 URLをキーに指定しておくと、例えば
let qmark a = ["http://www.google.co.jp"]
としておけば、goa
と打てば今開いてるタブでGoogleのページを、
gna
と打てば新しいタブでGoogleのページを開きます。
(READMEとかにはa
で指定してgnb
で開くみたいな説明しか無くてあれですが。)
qmarksを設定する際の注意として、なぜかqmarksの設定だけは
上の設定ページからSave
を押して保存しても反映されず
(キー設定などはそれで即座に反映される)、
Chromeを再起動して初めて反映されます。
最後にキーマップをしてますが、キーマップについて、
Vimのmap
noremap
の概念とちょっと違ってくるので注意が必要です。
Vim(Vimperatorも同様)では、map
を呼ぶと、
右辺に指定されてるキー自体のマッピングに変更があると、それも
左辺のキーに対するマップに反映されます。
一方、noremap
というコマンドもあって、こちらを使うと
右辺に指定するキーは、それ自体に変更があろうとなかろうと
右辺のキーに与えられたVimデフォルトの操作を左辺のキーに与えます。
つまり
map b c
noremap a b
map b d
こんな感じのマッピングがあると、
aに関しては常にbにもともと割り当てられた操作
(Vimであればback
(1単語戻る))が割り当てられます。
map b c
map a b
map b d
の様にすると、aはdを押したのと同じ操作になります。
これが、cVimだと、map
コマンドしか無く、
さらにマップされるのはその時点で右辺のキーに割り当てられていた機能になります。
つまり
map b c
map a b
map b d
とした場合どうなるかというと、aは、cを押したのと同じになります。
上で設定している物は、Ctrl-f等がPageDownとかに何故か割り当てられていないので それらのスクロール設定と、 Vimperatorで設定されてるdでタブを閉じたりするタブ操作です。
このタブを閉じるcloseTab
というコマンドについて、READMEではquit
となってますが、
quit
はコマンドラインのコマンドとして(:quit
)使えるもので、
キーマップに割り当てられるのはcloseTab
です。
(:quit<CR>
を割り当てても勿論同じですが)
また、uに割り当てているlastCloseTab
は、全ウィンドウ中の最後に閉じたタブ、
を開こうとするので、例えば直前に1つウィンドウを閉じて居ると、
そのウィンドウ自体を再び作ってタブを再現しようとするので
もうちょっと賢くして欲しい所。
(Vimperatorだとウィンドウ毎にタブの管理が行われています。)
また、インサートモードの時に変なマッピングがデフォルトであるので、
全て無効にするためにiunmapAll
を最後に入れています。
(emacsライク(コマンドラインライク)な動きですが、少なくともCtrl-h
をbackwordWord
に割り当ててるのだけは消さないと邪魔。)
cVimrc: Syncの罠
罠、というほどでもありませんが、 cVimrcの編集画面でのSyncボタンはあくまでGistにあるものを取ってくる、 と言う作業をするだけなので、手元で変更などをした場合、 それらが全て上書きされます。
しかも通常のエディタみたいにUndoすることも出来ないので、 間違ってボタンを押してしまうと非常に残念な気持ちになります。
安全にいきたいときは、もうGistの方を直接変更してSyncして、みたいにするのが 良いくらいです。
VimperatorにあってcVimにないもの
実際の所沢山あるかもしれませんが、 特に今のところマップがnoremapがなかったりcmapがなかったりするところとか。
また、Vimperatorを使っていて良く使うキーマップで
nnoremap <C-g> YP
というのを使っていて、
Y
が現在選択中の文字列をコピー、P
がクリップボードの文字列を新しいタブで検索、
と言う機能なので、これで文字列を選択した状態でCtrl-g で新しいタブで文字列のGoogle検索結果を表示、とか出来ます。 これをcVimで何とかしようと
map <C-g> :execute vlhyP<CR>
とか、Visualモードに入ってコピーして、みたいなことをやってみましたが
上手く出来ませんでした。
(cVimには選択中の文字列をコピー、の機能が無い。ビジュアルモードに入った後、
lh
と左右に降ってるのは、手で同じ様なことを打ち込んでみると、
v
をした直後だとコピーが効かなかったので。何故か一歩でも動くと出来るようになる。。。 ?
ただし、これらを:execute
とか使って実装してみても上手くいかない)
それからVimpertorでよく使ってるのが multi_requester.js 1 というプラグインで、検索結果やなんらかのリクエスト結果などを オーバーレイで表示してくれるもの。
これらが無いとちょっと移行する気にはなれない所。
cVimを使わずにGoogle ChromeでVim
cVimを使わなくても、キーマップするだけのプラグインはすでにありましたが、 そんなものも使わなくても、OSワイドに設定することも可能なのでそれで大概は十分です。
- Windows:
- Vim以外でVimする: Windows編 (yamyを使った方法)
- Vim以外でVimする: Windows+AutoHotkey編
- Mac
Hit-a-Hintの機能だけ Moly HaH というプラグインとかもあるのでこの辺だけ入れておけばOKだったり。
FirefoxのVimperatorについて
結局Firefox+Vimperatorで行くことに落ち着いていますが、 Firefoxでも、Vimperatorがだいぶ前に一部の開発者の人が喧嘩別れをして、 PentadactylというVimperatorとは独立のプラグインを作っています。
元が同じものなので同じように使えてイマイチ差異については理解してませんが、 Vimperatorの最終更新が2013年11月でPentadactylは2014年の3月に更新されています。
- Vimperator - vimperator labs
Pentadactyl — Dactyl Hom: (http://5digits.org/pentadactyl/
そのうち何が違ってどう使えるか調べてみたい所。