FirefoxにVimperatorの設定をして、かつ高速化を頑張ってみた

最近になってようやくvimperatorを入れた。


私はemacsが好きなのでvimperatorを使うのは「なんとなくちがうな」と思っていたのですが、使ってみるとかなりいいです。


vi系のキーバインドは、エディタだとコーディングが主なのでインサートモードに移行するのがいちいちめんどくさかったんですが、
ブラウザだと画面の操作が主なので特に不便はなしという感じです。


むしろブラウザの下部にコマンドが表示されるのがCUIエディタを使う人は皆しっくりくるはず。


あとキーバインドは設定で少しいじって、KeyRemap4MacBookEmacs Modeと併用することですこしemacs-likeになりました。

vimpratorのインストール

https://addons.mozilla.org/ja/firefox/addon/4891からインストールしてFirefoxを再起動してください
もしTabMixPlusを入れている場合は
「ツール」→「TabMixPlusのオプション」→「マウス」→「マウスジェスチャー」→「クリックでタブを選択する場合、ボタンを離すまで選択しない」のチェックボックスをOFFにしないとマウスでタブを選択できませんでしたので設定を変えておくことをおすすめします。

設定ファイルとプラグインフォルダを作成

設定ファイルとプラグインを置くフォルダを作成します。
ちなみにWindowsはHomeを環境変数に定義したりとかしないといけないらしいですが当方MACのため割愛します

touch ~/.vimperatorrc
mkdir ~/.vimperator/plugin # => plunginとなっていたのを、コメントをいただいて修正しました。

設定ファイル

" =====================
" ==Common=============
" =====================
" ブラウザタイトルの変更
" Firefox デフォルトは 「Mozilla - Firefox」、vimperatorを入れると「vimperator」
set titlestring=Firefox
"エラー時のビープ音をビジュアルベルに
set visualbell
"詳細表示行数(最大値=9)
set verbose=9
":[tab]open時の補完設定(s=検索エンジン+キーワードURL,S=サジェストエンジン,l=ロケーションバーの補完機能を利用,b=ブックマーク)
set complete=sS
"デフォルト検索エンジン(検索バーの管理→キーワードでgoogleをgに変更しておく)
set defsearch=g
"サジェストエンジンの設定
set suggestengines=g
"コマンド入力時にコマンド名を自動補完
set wildoptions=auto
" ページロード時にテキストボックスにフォーカスするのを防ぐ
set focuscontent
"検索語のハイライト
set hlsearch
"開いているページが1つならタブ非表示
set showtabline=1
"履歴を保存
set history=100
"以下のとき新しいタブで開く
set activate=homepage,quickmark,tabopen,paste
" ツールバーを表示
set guioptions=Trb

" =====================
" ==Key-Bind===========
" =====================

"ロケーションバーにフォーカス
map <C-l> <A-d>

"各種バー表示をトグル
noremap <C-1> :set guioptions=""
noremap <C-2> :set guioptions=Brb
noremap <C-3> :set guioptions=Trb


" 選択文字列のコピーを <C-w> に割り当て
map <C-w> :echo Yank!<CR>Y

" j/k でのスクロール幅変更
map j 5<C-e>
map k 5<C-y>

" Backspace に戻るを割り当て
map <C-h> <A-Left>

" h/l に戻るや進むを割り当て
map h <A-Left>
map l <A-Right>
map <M-n> <A-Right>
map <M-p> <A-Left>
" H/L や ← → でタブ移動
map H gT
map L gt
map <Left>  gT
map <Right> gt

" Shift + ← → で現在のタブの位置変更
map <S-Right> :tabmove! +1<CR>
map <S-Left>  :tabmove! -1<CR>

" bookmarkをbで開けるようにする
map b :bmarks!<Space>

map <M-x> :
map t :tabopen<Space>g<Space>
map o :open<Space>g<Space>
" =====================
" ==plugin=============
" =====================

" feedSomeKeys_2.js
" http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/feedSomeKeys_2.js
autocmd LocationChange .* :fmapc
" googlereaderでショートカットを有効にする
autocmd LocationChange 'www\.google\.co\.jp/reader' :fmap! -vkey j k n p m s t v A r S N P X O gh ga gs gt gu u / ?
" livedoorReaderでショートカットを有効にする
autocmd LocationChange 'reader\.livedoor\.com/reader' :fmap j k s a p o v c <Space> <S-Space> z b < >


" migemo-hint.js
set hintmatching=custom

" char_hints_mod2.js
" hintは小文字の英字で表示(絞り込みをしたい場合はIOにかえる)
let g:hintsio="io"
let g:hintchars="HJKLASDFGYUIOPQWERTNMZXCVB"

" lookupDictionary.js
map e :eijiro<Space>


" =====================
" ==style==============
" =====================

" vimperatorのコマンドライン時はimeをOFFにする
" http://vimperator.g.hatena.ne.jp/teramako/20090311/1236776437
:style -name commandline-ime chrome://* #liberator-commandline-command input {ime-mode: inactive;}

" 表示スタイル
" http://d.hatena.ne.jp/lillilife/20090423/1240489978のhintスタイルを変更したものを使用

" ==Vimperator_Color_Scheme==
" name: BrewBlue
" ==Mono_Color_Scheme==
" hi Hint                       color: #333333;         background: White;      font-size: 14px;        font-family: Consolas, Osaka, monospace,  monospace;    font-weight: bold;      padding: 0px 2px;       border: 3px outset #ddd;        opacity:0.80;
" hintのスタイルを変更
hi Hint font-family: "Bitstream Vera Sans Mono",monaco,monospace; font-size: 12px; font-weight: bold; color: white; background-color: green; border-color: ButtonShadow; border-width: 0px; border-style: solid; padding: 2px; line-height: 1em;

hi HintElem             color: Black;           background: PowderBlue;
hi HintActive           color: White;           background: SteelBlue;

"hi StatusLine          color: #333333;         background: #eeeeee;    font-size: 10pt;        font-family: Consolas, Osaka, monospace, monospace;
"hi StatusLineBroken    color: #333333;         background: #ff6060;                            font-family: Consolas, Osaka, monospace, monospace;
"hi StatusLineSecure    color: #333333;         background: #aacf53;                            font-family: Consolas, Osaka, monospace, monospace;

hi Normal               color: SkyBlue;         background: #333;       font-size: 9pt;         font-family: Consolas, Osaka, monospace, monospace;
hi InfoMsg              color: SkyBlue;         background: #333;       font-size: 9pt;         font-family: Consolas, Osaka, monospace, monospace;
hi ModeMsg              color: SkyBlue;         background: #333;       font-size: 9pt;         font-family: Consolas, Osaka, monospace, monospace;
hi MoreMsg              color: SkyBlue;         background: #333;       font-size: 9pt;         font-family: Consolas, Osaka, monospace, monospace;
hi LineNr               color: DodgerBlue;      background: #333;       font-size: 9pt;         font-family: Consolas, Osaka, monospace, monospace;
hi Question             color: LightYellow;     background: #333;       font-size: 9pt;         font-family: Consolas, Osaka, monospace, monospace;
hi WarningMsg           color: DeepPink;        background: #333;       font-size: 9pt;         font-family: Consolas, Osaka, monospace, monospace;
hi Keyword              color: CornflowerBlue;                          font-size: 9pt;         font-family: Consolas, Osaka, monospace, monospace;
hi Tag                  color: CornflowerBlue;                          font-size: 9pt;         font-family: Consolas, Osaka, monospace, monospace;
hi NonText                                      background: #333;
hi Null                 color: SkyBlue;
hi Filter               color: #aacf53;         font-weight: bold;


hi CompTitle            color: DodgerBlue;      background: Black;      font-weight: bold;      font-family: Consolas, Osaka, monospace, monospace;
hi CompResult           width: 45%;             overflow: hidden;                               font-family: Consolas, Osaka, monospace, monospace;
hi CompDesc             width: 50%;                                                             font-family: Consolas, Osaka, monospace, monospace;
hi CompItem                                                                                     font-family: Consolas, Osaka, monospace, monospace;
hi CompItem[selected]   color: #aacf53;         background: #555;       font-weight: bold;      font-family: Consolas, Osaka, monospace, monospace;

hi Gradient             height: 1px;            margin-bottom: -1px;    margin-top: -1px;
hi GradientLeft         background: #aacf53;
hi GradientRight        background: #333333;

hi Title                color: SkyBlue;
hi Indicator            color: DodgerBlue;
hi String               color: DeepPink;
hi Number               color: DeepPink;
hi Object               color: Khaki;
hi Function             color: DeepSkyBlue;
hi URL                  color: PowderBlue;

hi TabNumber            color: White;           font-weight: bold;      font-size: 10pt;        font-family: Consolas, Osaka, monospace, monospace;

style -name tab chrome://* <<EOM
#liberator-statusline {
    font-family: Consolas, Osaka, monospace !important;
    font-weight: normal !important;
    font-size: 10pt !important;
    padding:3px 0 !important;
}
.tabbrowser-tab {
    font-size: 12px;
    font-weight: normal;
    text-align: left !important;
}
#status-bar statusbarpanel {
    padding: 0 1px !important;
}
statusbarpanel > * {
    margin: 0 !important;
    padding: 0 !important;
}
EOM


" 読み込んだ事を出力
" vim: set ft=vimperator:

その他Add-onのインストール

migemo関係を使うためにXUL/Migemo
https://addons.mozilla.org/ja/firefox/addon/5239
からインストールします。

プラグインのダウンロード

以下のプラグインを使用しましたのでさっき作ったフォルダにダウンロードします。

char-hints-mod2.js
hintを英字に変更してくれる
feedSomeKeys_2.js
LDRGoogleReaderキーバインドを一部替えたり無効にしたりできる
migemo-find.js
サイト内検索でimeをONにしなくても日本語を検索できる
migemo_hint.js
hintを絞り込む際にimeをONにしなくても日本語を絞り込める
migemo_completion.js
その他各種検索をimeをONにしなくてもry
commandBookmarklet.js
BookMarkLetをコマンドに替える
lookupDictionary.js
英辞郎コマンドラインから使える
walk-input.js
でフォームのインプットに直接移動

高速化のために

以下のAdd-onを入れるとSqliteのreindexをかってにしてくれるようになるので高速に動くようになります。

ただし実験的Add-onのため自己責任で使ってください

https://addons.mozilla.org/ja/firefox/addon/11198

設定ファイル中にも書いていますが、検索バーの検索エンジンを変えるドロップダウンから、「検索バーの管理」を開いて、

googleのキーワードをgに変えておくと以下の点がすてきです。

  • suggestenginesをgoogleにしておくとなぜかgoogleクイックサーチの方を使用してしましいsuggestがうまく表示されてないため、一文字入力する毎にかなり重くなる
  • 検索エンジンを切り替える際にgとスペースを削除すればいいだけのなので楽ちん
Ramdiskを作成してキャッシュをそこに吐くようにすると少し改善されます。

http://www.moongift.jp/2008/12/ramdisk_on_menubar/を使用するとRamdiskの作成とサイズ変更が楽になります
Ramdiskを作ったら/Users/username/Library/Application Surpport/Firefox/Profiles/******.default/配下にuser.jsというファイルを作成し以下の記述をします

user_pref("browser.cache.disk.parent_directory","/Volumes/RamDisk");

上記のツールを使わない場合は/Volumes/RamDiskRamDiskディレクトリを変更してください

もしマウスジェスチャ系のAdd-onを入れている場合はこの際消してしまいましょう。

KeyRemap4MacBookEmacs Modeの設定