そのねこが学ぶとき

ブログ移行しました→ http://chroju.github.io

突然だけどVimperatorrcを晒してみる

非常に唐突ではあるけどvimperatorrcを晒してみようと思う。2014年の今日、あんまりvimperator関連の日本語記事って見かけない気がしていて、少しでもそのへん貢献できればなぁという思い。

vimperator自体は何年か前から使っていたのだが、カスタマイズはあまりせずにデフォルトの状態で使っていた。が、操作によってはマウス使った方が便利だったり、ちょっと中途半端な状態にあったので、一念発起してちょこちょこいじってみた。まだいじれる余地はありそうなんだけど。

" vim: set filetype=vim :

Vimで編集するとき、vimperatorrc用のハイライトがないので、似たところでfiletypeをvimとして認識させてます。

"============================
" General
"============================

" 入力欄に自動フォーカスしない
set focuscontent
" ビジュアルベルを表示しない
set visualbell
highlight Bell display:none
" :oなどでの補完候補をサーチエンジン、履歴に限定
set complete=sl
" Hintモードでアルファベット使用
set hintchars=jfnvurhgytbkdmcielsxoe
" ツールバーはアドオンとタブのみ表示
set gui=addons,nobookmarks,nomenu,nonavigation,tas
" commandモードでIMEオフ
style! -name=commandline-ime chrome://* #liberator-commandline-command input {ime-mode: inactive;}

ここまでは基本、一般的な設定しかないかと。set complete=slは地味に効く。で、なぜか現状set hintcharsが動いてないれす。。。何がいけないのかわからん。

"============================
" Key mapping
"============================

" google検索を手早くする
noremap s :open<Space>google<Space>
noremap ,s :tabopen<Space>google<Space>

ここからキーマッピング。:openで検索もURL開くのも両方いけるのはいけるんだが、vimperatorでの自動判別がうまいこといかない(例えば「twitter おすすめ」とかで:openすると、Twitter検索で「おすすめ」を探した結果が表示されるとか)ときがあるので、明示的に:open googleを一発で開けるようにしてます。

" OS分岐
" dをブラウザ標準の「タブを閉じる」にマッピング
" vimperatorrcのリロード
js<<EOM
if(liberator.has("MacUnix")) {
  liberator.execute("map d <M-w>");
  liberator.execute("map ,r :source<Space>~/.vimperatorrc<CR>");
} else {
  liberator.execute("map d <C-w>");
  liberator.execute("map ,r :source<Space>~/_vimperatorrc<CR>");
}
EOM

dを打ったときに左隣のタブにフォーカスが移るのが気に入らないので、OSデフォルトの「タブを閉じる」ショートカットにdをリンクさせて、タブを閉じたときの挙動はTab Mix Plusで「直前のアクティブタブに移る」ように設定してる。このへん、vimperatorrcだけでなんとか設定できないものか。

あと、,rでvimperatorrcの再読み込みさせてます。この2つの設定はOSによって微妙に異なるので、分岐させますた。MacWindowsでしか使ってないのでかなり適当な分岐。

" 移動幅
noremap j 5j
noremap k 5k
" タブ移動
nnoremap h <C-p>
nnoremap l <C-n>
" タブの位置変更
map <C-l> :tabmove! +1<CR>
map <C-h> :tabmove! -1<CR>
" undo一覧から開く
nnoremap U :undo<Space>
let g:hint_tombloo_key = 'r'
" ブラウザ再起動
nnoremap <C-r> :restart<CR>

わりと良くある感じのキーマッピング

" VisualモードでC-gで選択しているテキストでGoogle検索
vmap <silent> <C-g> y<Esc><Esc>P

コメントの通り。Visualモードで文字列選択した状態でC-g押すと、選択文字列でGoogle検索します。URLの場合はそのまま開いてくれるはずだけど、やったことなし。

" タブのピン止めを@でトグル
" http://qiita.com/t3kot3ko/items/1b032940dbb79e88323e
javascript <<EOM
liberator.modules.commands.addUserCommand(["togglepin"], "add pin to current tab",
function(){
    var currentTab = gBrowser.mCurrentTab
    if(currentTab.pinned){
        gBrowser.unpinTab(currentTab)
    }
    else{
        gBrowser.pinTab(currentTab)
    }
});
EOM
nnoremap @ :togglepin<CR>

地味にピン止め使うのでキーマッピングしました。Firefoxのこの全部Javascriptでなんとかなる感じ好きよ。大好き。ちなみに以下エントリーから丸コピーしてます。

Vimperator - タブのピン留めをトグルする - Qiita

"============================
" colorscheme
"============================
" デフォルトのヒント派手すぎ><
hi Hint font-family: Arial; font-size: 21px; font-weight: bold; text-shadow: -1px -1px 2px black, 1px -1px 2px black, -1px 1px 2px black, 1px 1px 2px black; color: #33cccc;
hi HintElem color: gray; background-color: #a1e4e6;
hi HintActive color: black; background-color: #ff8700;

" デフォルトのエラー赤くてこわい><
hi ErrorMsg color:white; background-color: #ec6aa1;

デフォルトのヒントモードが色彩的に大変ウザいので……。色はもうちょい改善の余地あるかなと思ってる。

スクリーンショット 2014-02-09 10.09.25

"============================
" qmarks
"============================
qmark m https://mail.google.com/
qmark b http://b.hatena.ne.jp/chroju
qmark t http://chroju.tumblr.com/
qmark f http://cloud.feedly.com/#latest
qmark p http://getpocket.com/a/queue
qmark B http://chroju.hatenablog.jp/

QuickMarks設定。これ入れておくと、例えばgomでアクティブタブにGmailが開きます。gnmで新規タブで開ける。あんまり使ってない。

"============================
" plugin
"============================

" plugin_loader
let g:plugin_loader_roots = "~\vimperator\vimperator-plugins\ ~/.vimperator/vimperator-plugins/"
let g:plugin_loader_plugins = "_libly,direct_bookmark,sbmcommentsviewer,caret-hint,appendAnchor,stella,feedSomeKeys_3,commandBookmarklet,copy"

ここからプラグインプラグイン管理はplugin_loaderを使うとアホみたいに便利です。

普通、プラグインって~/.vimperator/plugin/フォルダに入れて(あるいはシンボリックリンク貼って)読み込ませると思うのだが、このplugin_loaderを~/.vimperator/pluginフォルダに入れれば、以下設定が適用可能に。

つまりhttps://github.com/vimpr/vimperator-plugins.gitをどっかにgit cloneしておいて、そのフォルダに対してg:plugin_loader_rootsを指定しておけばどのプラギンもシンボリックリンクとか貼らずに好きに使えるってわけです。便利過ぎ。

" Evernote Clearly
nnoremap e :<C-u>js __readable_by_evernote.__readable_by_evernote__launch(false)<CR>
nnoremap E :<C-u>js __readable_by_evernote.__readable_by_evernote__launch(true)<CR>

プラグインじゃないけど。。。アドオンのEvernote Clearyの操作をeとEにマッピングさせてる。これもどっかで拾ったコードです。

" direct_bookmark
let g:direct_sbm_use_services_by_tag = "h"
let g:direct_sbm_use_services_by_post = "h"
source! $HOME/.vimperatorrc.local

direct_bookmarkの設定。コマンドからdeliciousとかはてブとかソシアルブックマアクに投稿できるヤツです。はてブしか使ってないので、はてブだけで使えるように。

" vのみではてブコメント表示
map v :viewSBMComments<Space>-t<Space>h<Space>-f<Space>id,comment<CR>

sbmcommentsviewerの設定。ソシアルブックマアクのコメントがコマンドで見られるようになるヤツ。これもはてブだけに設定。

" feedSomeKeys
command! -nargs=+ lazy autocmd VimperatorEnter .* <args>
lazy fmaps -u='mail\.google\.com/mail' c / j k n p o u e x s r <S-i>  a # [ ] ? gi gs gt gd ga gc
lazy fmaps -u='mail\.google\.com/mail/.*/[0-9a-f]+$' c / j,n k,p n,j p,k o u e x s r a # [ ] ? gi gs gt gd ga gc
lazy fmaps -u='feedly\.com' j k n p o v gm ga gg gl / r m x s t l f b
lazy fmaps -e=vkeydown -u='www\.tumblr\.com/' j k r t q p n L l<CR>
lazy fmaps -u='www\.pixiv\.net/member_illust\.php\?mode=manga&illust_id=[0-9]+' j k

feedSomeKeysの設定。特定URL下で特定キーを無効化するプラギン。:ignorekeysより細かく設定ができるから好き。ただ、いまいち設定方法が飲み込めてなかったりもする。現状はGmailfeedlyTumblr、pixivの漫画モード(?)で設定させてる。Gmailの設定が被ってるとこなんとかしたい。。

" copy.js
javascript <<EOM
(function () {
  liberator.globalVariables.copy_templates = [
    { label: 'titleAndURL',    value: '%TITLE%\n%URL%' },
    { label: 'markdown',       value: '[%TITLE%](%URL%)' },
    { label: 'title',          value: '%TITLE%' },
    { label: 'anchor',         value: '<a href="%URL%">%TITLE%</a>' },
    { label: 'selanchor',      value: '<a href="%URL%" title="%TITLE%">%SEL%</a>' },

    { label: 'amazon',   value: 'copy clean amazon url from current page',
      custom: function() {
        var m = content.document.location.pathname.match(/dp\/(\d+)/);
        return m ? ('http://amazon.jp/dp/' + m[1]) : null;
      }
    },
  ];
})();
EOM

" 特によく使う機能をキーマッピング
map ,y :copy<Space>titleAndURL<CR>
map ,my :copy<Space>markdown<CR>

copy.jsの設定。いろいろと好きな形式でコピーが出来るようになる。{ label〜のとこの設定がそれに当たりまして、例えば:copy markdownコマンドでマークダウン記法用にタイトルとURLがコピーできる。ブログ書いてるとこれホント便利。

基本的には%TITLE%や%URL%といった変数を使って設定するんだけど、javascriptも欠けます。label: amazonではAmazonのURLを短い(アフィ用のパラメータとか除外した)状態でコピれるようjavascriptで書かれてる。詳しくは以下エントリー。

JavaScript - vimperatorプラグインcopy.jsで、いま開いてるamazonの本のページの短いURLをクリップボードにコピる。あと正規表現で好きなとこコピる - Qiita

"============================
" about:config
"============================

set! network.dns.disableIPv6=true
set! network.http.pipelining=true
set! network.http.proxy.pipelining=true
set! network.http.pipelining.maxrequests=8
set! network.http.max-connections-per-server=32
set! security.dialog_enable_delay=0
set! browser.tabs.closeWindowWithLastTab=false
set! browser.cache.memory.capacity=16384
set! browser.sessionstore.interval=500000
set! dom.popup_maximum=50
set! browser.cache.disk.enable=false
set! browser.cache.memory.capacity=-1
set! layout.spellcheckDefault=0
set! javascript.options.mem.high_water_mark=32

Vimperatorはset!でabout:configの設定ができます! 便利! これでabout:configの内容も共有できるよ! 設定内容はウン年前にやったままなので、具体的に何やってんのか覚えてないれす。メモリ周りの設定が主だったと思うので、最近の比較的軽くなったFxなら要らない設定もあるかも。

"読み込み完了メッセージ
echo "vimperatorrc loaded."

" [EOF]

最後に、vimperatorrcが読み込まれたとき用のechoを入れる。これがないと,r押しても読み込まれたのかわかんないので。

vimperator、Vimmerじゃなくても便利なのでじゃんじゃん使いましょう晒しましょう。