読者です 読者をやめる 読者になる 読者になる

しまてく

学んだ技術を書きためるブログ

vimperator 1.2pre が気持ちよすぎる件について

vimperatorとは

vimperatorのヘルプから引用すると↓こんな感じ。

はじめに導く者(Navigator)あり、のちに冒険者(Explorer)現る。
やがて征服者(Konqueror)がやってきた。

そしてついに...皇帝(Imperator)、Vimperatorの時代が到来した

ヘルプ(:h)より


一言でいってしまうと、vimの操作感でFirefoxを操作してしまおう!
というアドオンです。

vimperator (http://vimperator.mozdev.org/)

実際に使ってみて

エントリのタイトルにも書いたとおり、気持ちよすぎます><

何が気持ちいいかというと、

キー 動作
hjkl ページ内移動
戻る
進む
左のタブをアクティブ
右のタブをアクティブ
/ 検索
:t 新しいタブで開く

などなど今までマウスでやっていたことが全てvim-likeにキーボードでできます!

でもこれって初期状態

僕はあまりデフォルトのままというのは好きじゃないのでいろいろ
弄ってみることにします。


まずは設定ファイル「vimperatorrc」を$HOME*1に作成します。


臆面もなく晒すとこんな感じ。

""""""""""""""""""""""""""""""""""""""""
" マッピング
" j/k でのスクロール幅を1行から5行に変更
map j 5<C-e>
map k 5<C-y>

" J/K をC-d/u互換に
map J <C-d>
map K <C-u>

" C-h/l で選択タブ変更
" 前
noremap <C-l> gt
" 後
noremap <C-h> gT

" C-H/L でタブ位置変更
map <C-L> :tabmove! +1<CR>
map <C-H> :tabmove! -1<CR>

" コマンドモードでの操作
cmap <C-n> <Tab>
cmap <C-p> <S-Tab>
cmap <C-f> <Right>
cmap <C-b> <Left>

" Alt+↑/↓でメニューの表示/非表示
map <A-Down> :set guioptions+=mT<CR>
map <A-Up> :set guioptions-=mT<CR>

" ヤンク
map <C-c> Y

" c-jでEsc
map <C-j> <C-[>
imap <C-j> <C-[>
cmap <C-j> <C-[>

" . でタグリストを表示/非表示
map . :ls!<CR>

" vimperator 1.2 06-17以降でOS側のショートカットが効かなくなったので代替
imap <C-f> <Right>
imap <C-b> <Left>
imap <M-v> <C-v><M-v>
cmap <C-f> <Right>
cmap <C-b> <Left>
cmap <M-v> <C-v><M-v>

" ! でページのCSSをon/off
map ! :set invum<CR>

""""""""""""""""""""""""""""""""""""""""
" オプション
" 起動時にメニューバーのみ表示
set guioptions=m

" エラーコンソールに詳細表示
set verbose=9

" ビープ音を鳴らさないためにvisualbellを有効にする
set visualbell
" visualbell無効
set visualbellstyle = ""

" Exコマンドと検索パターン履歴の記録数
set history=1000

" EXコマンドの表示を新しいタブに。
set newtab=all

" デフォルトの検索エンジン
set defsearch=google

" 履歴とブックマークの最初の補完をスピード・アップ
set preload

" INSERTモードとTEXTEREAモードで<C-i> を押した時のエディタ
set editor=D:\Tools\vim\gvim.exe -f

" これらの機能で新規タブを開いた際はアクティブにする
set activate=homepage,quickmark,tabopen,paste

" ex mode でインクリメント補完
set wildoptions=auto

" :[tab]open コマンドで補完する候補と順番
set complete=sbl

" ブラウザタイトルの変更
set titlestring=Firefox

" 常にタブを表示
set showtabline=2

" Hit-a-Hintのフォントを大きく
set hintstyle+= font-size:15px;

" ]]/[[ で次/前のページに移動
set nextpattern+=next, 次(の)?ページ,\b次.*,→\b,下一頁,Следующая,・、・隹&#128;
set previouspattern+=prev, 前(の)?ページ,\b前.*,\b←


""""""""""""""""""""""""""""""""""""""""
" プラグイン
" ime_controller.js
let g:ex_ime_mode = "inactive"
let g:textarea_ime_mode = "inactive"

" migemo_hint.js
set hintmatching=custom

" googlesuggest.js
map s :google<Space>

" direct_bookmark.js
let g:direct_sbm_use_services_by_tag = "dh"
let g:direct_sbm_use_services_by_post = "dh"
let g:direct_sbm_is_normalize = "false"
let g:direct_sbm_is_use_migemo = "true"
map B :bentry<CR>
map a :sbm<CR>
map A :sbm<Space>
map ,a :btags<CR>

" copy.js
map c :copy<Space>
js <<EOM
liberator.globalVariables.copy_templates = [
  { label: 'titleAndURL',    value: '%TITLE% %URL%' },
  { label: 'title',          value: '%TITLE%' },
  { label: 'url',            value: '%URL%' },
  { label: 'markdown',       value: '[%TITLE%](%URL%)' },
  { label: 'markdownsel',    value: '[%SEL%](%URL% "%TITLE%")' },
  { label: 'htmlblockquote', value: '<blockquote cite="%URL%" title="%TITLE%">%HTMLSEL%</blockquote>' }
];
EOM

" Gmail
js <<EOF
autocommands.add('CurrentPageLoad,TabSelect',/mail\.google\.com\/(mail|a)\//,[
  'js plugins.feedKey.setup(',
  '"c / y j k n p o u e x s r a # [ ] z ? gi gs gt gd ga gc".split(/ +/).map(function(i) [i, "4" + i])', 
  ');'
].join(''));
EOF
autocmd TabLeave https://mail\.google\.com/(mail|a)/ :fmapc

" ステータスバーにfeedボタンを表示
" http://d.hatena.ne.jp/teramako/20071205/p1
js <<EOM
(function(){
 var feedPanel = document.createElement('statusbarpanel');
 var feedButton = document.getElementById('feed-button');
 feedPanel.setAttribute('id','feed-panel-clone');
 feedPanel.appendChild(feedButton.cloneNode(true));
 feedButton.parentNode.removeChild(feedButton);
 document.getElementById('status-bar').insertBefore(feedPanel,document.getElementById('security-button'));
})();
EOM

" ページのアクセスキーを無効化、他
js <<EOM
  liberator.options.setPref('ui.key.generalAccessKey', 0);
  liberator.options.setPref('browser.tabs.loadDivertedInBackground', false);
EOM

" 読み込んだ事を出力
echo ".vimperatorrc sourced"

" autoIgnoreKey.js
javascript <<EOM
liberator.globalVariables.autoignorekey_pages = uneval([
  /^https?:\/\/mail\.google\.com\//,
  /^https?:\/\/fastladder\.com\//,
  /^https?:\/\/reader\.livedoor\.com\/reader/,
]);
EOM

入れてるプラグイン

Twitterのタイムライン見たりPOSTしたり。

    • walk-input.js

でページ内のエディットボックスにフォーカスを合わせる。

    • autoIgnoreKey.js

特定のサイトでキーバインドがかぶらないように。

    • copy.js

をしたときの動作。

    • direct_bookmark.js

はてぶ、del.icio.us、ライブドアReaderに同時にブックマークできる。

    • googlesuggest.js

:googleでグーグルサジェストが使える!

    • ime_controller.js

imeの状態を気持ちよくしてくれる。

    • migemo_hint.js

fでHintを出したときに、ローマ字で日本語の絞込みができる、らしい*2


ついでに少し替えてみた。

タブを左側に配置

最後にスクショ

ということでvim使いはみんなvimperator入れて幸せになりましょう\(^0^)/

追記(6/30)

    • migemoが発動しない。
    • ステータスバーにfeedボタンを表示できていない

などいくつかよくわからない部分があったので調べていたら以下のコードをコメントアウトしたら
ちゃんと動作するようになることがわかった。

" ]]/[[ で次/前のページに移動
set nextpattern+=next, 次(の)?ページ,\b次.*,→\b,下一頁,Следующая,・、・隹&#128;
set previouspattern+=prev, 前(の)?ページ,\b前.*,\b←

完璧なまでにどっかのページからのコピペなので、何ゆえこんな文字がいっぱいあるかが
よくわからないままコメントアウト。


ていうかAutoPagalizeつかってるから気にしてなかった。。

*1:$HOMEはwindowsの場合は「\document and settings\ユーザ名\」 です。

*2:設定がまずいらしくmigemoが発動してくれません;;