今までお世話になったVimperatorも、e10sやWebExtensions対応で、先行きが見えない。
使えなくなる可能性高いし、その前に何か書こうと思ってようやく書き始めた。
始めるのが一番エネルギー必要って聞いた事あるけど、ほんとその通りだと思う。
環境は以下の通り。なお、Firefoxはポータブル版を使用。
Vimperator: 3.15.0 (created: 2016/10/05 01:11:26)
Firefox: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0
あと、何故か一部のgifが正常に表示されないんだけど、原因さっぱりなので放置。
- この記事について
- Vimperatorとは
- 特徴
- 良く使ってた機能
- 最後に
この記事について
個人的なVimperatorのメモ。 今までどんな風にVimperatorを使ってきたかを思い出しつつ、自分のrcを見ながら書く。
Vimperatorとは
Firefoxを、Vimのようにキーボードで操作可能にするアドオン。
Vimperator :: Add-ons for Firefox
かなり深い所まで弄っているのか、本当に色んな事が可能
まぁそのせいでWebExtensions対応やe10s対応が大変なんだろうけど。
最初このアドオンを知った時は笑った。Vimmer凄い。
そんな私も、サブブラウザとしてChromeの事を調べる際、
真っ先にVim系のアドオンを探す程度には染まりました。Vimperatorの罪は重い。
特徴
全てキーボードで操作可能になるため、マウスを触る必要がなくなる
マウス嫌いなので、これ重要。ただし一部例外あり。
Vimと同じくモードの概念がある
Ignore ModeとEmbbed Modeでは、キーボード操作不可になる。
それ以外ではほぼキーボードのみで操作可能。
モード | 状況 |
---|---|
Normal Mode | ブラウジング中など。 |
Insert Mode | 文字入力中など。 |
Visual Mode | 文字選択中など。 |
Command Mode | コマンドラインで入力中など。 |
Ignore Mode | 一時的にVimperatorを無効化した時など。 |
Embbed Mode | フラッシュに触れた時など。 |
プラグインで拡張可能
~/Vimperator/Plugins
とかにプラグインを放り込むと、拡張できる。色々な人がプラグインを公開している。今なら、githubの vimperator-plugins 辺りを探せば色々と見付かる。
設定ファイルで自由に設定可能
vimと同じように設定ファイルを作って、自由に設定できる。設定項目も多岐に渡る。
「Vimにこの設定あるけど、Vimperatorにもないかなー」とか考えながら探すと大抵見付かる。
良く使ってた機能
改めてみると、本当に機能が多い。というわけで、自分が使ってた機能から抜粋して書く。
というか、自分のrc見ながら書く。
正直全機能使いこなすなんて無理なので、やりたい事ができた時、その実現方法を調べられれば十分と思う。:help
を読んだり、ググったり。
ただ、一歩踏み込んだ内容を知りたいと思った時、調べても余り出てこない気がする(した)。
Smart Completions
o
やt
を押すだけで、ブックマークや履歴を検索し、開く事ができる。
基本中の基本。だけど、最も重要な機能じゃないだろうか。
[f:id:tonkuma:20161218234223g:plain]
Firefox49位のころ、この機能が使えなくなって騒がれてたし、これが使えなくなると、利点が半分は消えそう。
タブ検索
b
を押すとタブ一覧が出てくるのほんと好き。他のブラウザも実装して。
[f:id:tonkuma:20161218234311g:plain]
どんなに沢山タブを開いていても、直ぐ探せる。
- 開きすぎると多分重くなるけど。
色んなコマンド
標準でも数百のコマンドが用意されてる。
全部は流石に使わないけど、以下を知ってるだけでも幸せになれる。
:addons
: アドオン画面を開く:preferences
: Firefoxの設定画面を開く:sbar
: サイドバーを開く
ブラウザ設定変更
about:config
の内容を変更できる。今だと、e10s周りの設定変更してる。
set! browser.tabs.remote.force-enable=false set! extensions.e10sBlockedByAddons=true set! extensions.e10sBlocksEnabling=true
ちなみに、VimFxでは上記フラグを全部逆にするよう設定してる。
Vimperator設定変更
_vimperatorrc.localというファイルを作り、色々とオプションを変更している。
ヒント周り
ヒント文字を変更したり、マッチするXPathを追加している。
set hintchars=asdfglkjhweio set hinttags& set hinttags+="| //div[@id or @class] | //img[@id or @class]" set extendedhinttags&
GUIの設定
タブ以外を消している。スクロールバーも消している。表示領域広くしたいからね。
set gui=noaddons,nomenu,nobookmarks,nonavigation,tabs set scrollbars=false
メニューは結構使うけど、それはem
コマンドでやってる。
入れ子になってるメニューを除けば、大体は操作可能。
アドオン追加すると良くTools
配下にコマンド増えるので、それ操作する時とか使ってる。
- AnkPixivToolとか。
次へ/前へリンクの追加
]]
と[[
で次へ/前へのリンクを探してくれるが、その探す文字列を追加している。
set nextpattern& nextpattern+='次(へ|の|ぺ)','^続き','^.次へ','>','>','次の\d+件' set previouspattern& previouspattern+='前(へ|の|ぺ)','^戻る','^.前へ','<','<','前の\d+件'
コマンドラインでIMEをoff
どこかからコピペした記憶。
style -name commandline-ime chrome://* #liberator-commandline-command input {ime-mode: inactive;}
VimFxでも似たような事してます。
マッピング
自分の好きな用にキー配置を変更できる。
:map <lhs> <rhs>
<lhs>
に割り当てたいキーを、<rhs>
に割り当てたい機能や関数やキーを書く。
Normal Mode
スクロール系。
マッピング | 機能 |
---|---|
nnoremap j <C-d> |
半ページ下にスクロール |
nnoremap d <C-d> |
半ページ下にスクロール |
nnoremap k <C-u> |
半ページ上にスクロール |
nnoremap e <C-d> |
半ページ上にスクロール |
nnoremap s <C-e> |
下スクロール |
nnoremap w <C-y> |
上スクロール |
左手のみで操作すること多いので、その辺増やしたり。
あと、h
やl
等の横スクロールは全て捨ててる。念の為に0
と$
だけ残してる程度。
タブ周り。
マッピング | 機能 |
---|---|
nnoremap <C-[> <ESC> |
キャンセル |
nnoremap h gT |
前のタブに移動 |
nnoremap l gt |
次のタブに移動 |
nmap << :tabmove! -1<CR> |
タブを左に移動 |
nmap << :tabmove! +1<CR> |
タブを右に移動 |
nmap gp :set apptab!<CR> |
タブを固定 |
nmap gd :tabdetach<CR> |
タブを別ウィンドウへ移動 |
:tabdetach
はVimFxにも欲しい。
バッファ周り
マッピング | 機能 |
---|---|
nmap # :buffer#<CR> |
直前のタブを開く |
nmap B :bmarks<Space> |
ブックマークを検索 |
その他色々。
マッピング | 機能 |
---|---|
map <silent> ! :set invusermode<CR> |
スタイルシート無効化 |
nmap <S-i> :pageinfo<CR> |
ページ情報の表示 |
nnoremap [panorama] <Nop> |
タブグループアドオン用 |
nmap ,l [panorama] |
タブグループアドオン用 |
nmap [panorama]a :panorama add |
タブグループ追加 |
nmap [panorama]l :panorama list<CR> |
タブグループ一覧 |
nmap [panorama]g :panorama pulltab |
他のタブを現在のタブグループに移動 |
nmap [panorama]p :panorama pushtab |
今見ているタブを別のタブグループに移動 |
nmap [panorama]r :panorama remove |
タブグループの削除 |
nmap [panorama]s :panorama switch |
タブグループの移動 |
他にもあるけど、結構今のバージョンで動かなくなってるの多かった。仕方ないね。
Insert Mode/Command Mode
文字入力中に、vimっぽく操作するために。
Command Modeはcmap
で設定。
imap <C-a> <Home> imap <C-b> <Left> imap <C-d> <DEL> imap <C-e> <End> imap <C-f> <Right> imap <C-h> <BS>
サイト固有の設定
動画サイトのプレイヤーを操作できるstella.js
向けに、youtubeやニコニコ動画のみで有効な設定を追加したり。
"for youtube nmap -urls www\\.youtube\\.com/watch p :stplay<CR> "for nicovideo nmap -urls www\\.nicovideo\\.jp/watch p :stplay<CR>
stella.js
お世話になったけど、今も動くのかな。
サイト毎に無視するキーの設定
マッピングとは少し違うけどまぁいいか。
指定されたURLでは、Vimperatorのキー入力を無視する設定。
全部無視されるので、-except
で、無視したくないキーを指定している。
ignorekeys add 'www\.nicovideo\.jp\/(mylist|watch)\/' -except 'h,J,<C-p>,l,K,<C-n>,j,<C-d>,k,<C-u>,<C-o>,a,o,O,s,u,f,F,t,T,g,G,b,y,;,:,#'
これ逆パターン(無視するキーを指定)があればなぁ…確かissue上がってた気がするけど。
略称名の指定
vimのabbrと一緒。主にtwitter用に、Command Modeで使えるように設定してる。
マッピング | 機能 |
---|---|
cabbr -j .title buffer.title |
.title を、今見ているページのタイトルに変換 |
cabbr -j .url buffer.URL |
.url を、今見ているページのURLに変換 |
cabbr -j .tau buffer.title + ' ' + buffer.URL |
上記二つの合成 |
クイックブックマーク
正式名称、他にありそうだけど。
特定のページはすぐに移動したいので、qmark
コマンドで設定してる。
qmark t http://twicli.neocat.jp/twicli.html qmark y http://baseball.yahoo.co.jp/npb/
例えばgny
と打つと、新しいタブでyahooスポーツを開く。
自作コマンド
仕事用にチェックボックスを操作するコマンドを作ったり、
URLを置き換える簡単なコマンド作ったり。この辺もe10sだと動かなそう。
command! change :js gBrowser.loadURI(buffer.URI.replace('-hosyu1', '-hosyu2')) nmap gh :change<CR>
各種プラグインの設定
確認したら、プラグイン26個入れてた。そのうち普段から使うのは半分もないと思う。
caret-hint.js
Visual Modeのキャレットをヒントで選択できるようにする。
let g:caret_hint_key = 'h' let g:caret_hint_tail_key = 'l' let g:caret_hint_select_tail_key = 'L'
標準だと少し使いづらいけど、これ入れると任意の場所にキャレット移動できて便利。
mouse_gestures.js
マウスジェスチャを実装する。片手で操作してるとどうしてもカバーしきれない機能とかは、これで定義。
multi_requester.js
色々なサイトへの問い合わせ、および、結果の取得を、コマンドライン上で実行する。
凄い便利。主に翻訳系で大活躍。
copy.js
任意のフォーマットでコピーできるようにする。
Twitterに貼るためだったり、markdown形式でURLコピーしたり。
余りにも便利なので、VimFxでも 同じ機能を作った程。 標準で欲しいレベル。
javascript <<EOM liberator.globalVariables.copy_templates = [ { label: 'titleAndURL', value: '%TITLE%\n%URL%' }, { label: 'title', value: '%TITLE%' }, { label: 'markdown', value: '[%TITLE%](%URL%)'} ]; EOM
twittperator.js
VimperatorでTwitterする。これも便利。けどtwicliも好き。
CSSの設定のせいか、現在のタブが全面表示されてるけど無視の方向で。
hint-yank-paste.js
文字列を直接コピーする。わざわざVisual Modeにならずに済む。
標準だとマッピング被ってるので、テキストのコピーだけ有効にしてた。
js <<EOM liberator.globalVariables.hints_copy_maps = ['c', null, null, null]; EOM let g:hints_copy_maps = "C <nop> <nop> <nop>";
toggler.js
任意の設定値をトグルする。地味に役立つ。
js <<EOM liberator.globalVariables.toggler = { gui_navi: ["set gui=nonavigation","set gui=navigation"], gui_tab: ["set gui=notabs","set gui=tabs"], }; EOM
タブやURLバーの表示/非表示を切り替えられるよう設定してる。
最後に
どう書くか思い付かなかったので、自分の設定の一部をだらだらと書いた。
Vimperator機能多すぎィ!
けれども、vimが好きな人にとって、本当に素晴らしいアドオンと思う。
既にVimFxに移行してしまったけど、Vimperatorの事は忘れない*1。
もし、vimが好きな人で、Vimperatorって何?という人がいたら、一度使ってみるといい。
きっと世界が変わる。
幸い、現在の安定板(Firefox50.1)では、まだVimperatorは動作するし、 Vimperatorの素晴らしさを体験するには、今が最後のチャンスかもしれない。
*1:まだ生きてるけど、風前の灯っぽいのでこう書く