Vimperatorの最近のブログ記事

2009年1月 8日

最近のVimperator

はてなグループが出来たのでそっちで書いてます。

retletのvimperator - vimperatorグループ

2008年9月 5日

入れてるVimperatorプラグイン

リンク貼ってないのはcodereposにあるのでsvnで。あとvimperatorrcもcodereposにある(リンク先はエントリ書いた時点でのファイル)

なおvimpのバージョンは2.0pre_2008-09-05を使用中。

  • appendAnchor.js (:anc でリンクを貼られてないURLにリンクを貼る)
  • local_mappings.js (特定のURLでのみ有効なキーマッピングを可能にする)
  • nicontroller.js (ニコニコ動画をvimpから操作)
  • ubiquity.js (ubiquityをvimpから操作)
  • auto_detect_link.js (vimp標準のnextpatternとpreviouspatternを拡張)
  • googlekanji.js (漢字を調べる)
  • lookupDictionary.js (辞書を引く)
  • nnp_cooperation.js (niconicoplaylist.user.jsをvimpから操作)
  • walk-input.js (<M-i>でページ内のinput/textareaを行き来する)
  • bookmarktoolbar-hint.js (ブックマークツールバーを対象にしたHit-aHint)
  • googlesuggest.js (バッファウィンドウでGoogle Suggest)
  • migemized_find.js (Migemoライクな検索)
  • proxy.js (プロキシ切り替え)
  • copy.js (タイトルやURL、選択したテキストなどをクリップボードに指定の形式でコピー)
  • hatenaStar.js (はてなスター付ける)
  • sbmcommentsviewer.js (バッファウィンドウで各種SBMに付けられたコメントを一覧)
  • direct_bookmark.js (指定したSBMで見ているサイトをブクマ)
  • ime_controller.js (ex mode時にIMEを指定の状態へ切り替える)
  • migemo_completion.js (:buffer 時にMigemoライクな絞り込み)
  • tombloo.js (tomblooをvimpから操作)
  • feedSomeKeys.js (指定のキーをvimpで処理せずに、ブラウザに渡す or 別のキーに変換してブラウザに渡す)
  • ldrize_cooperation.js (LDRizeとVimpearotrをシームレスに連動)
  • migemo_hint.js (Hit-a-HintでMigemoライクな絞り込み)
  • twitter.js (Twitterにポストしたり特定ユーザーの発言最新20件を取得したり)
続きを読む: 入れてるVimperatorプラグイン

2008年7月 7日

VimperatorでコピーやペーストとかOSのショートカットが効かない

Vimperatorの1.2pre 06-17版くらいから、Mac OS X標準のキーバインドが一部効かなくなった(Winでも起こるけど同じタイミングで問題が発生したかは不明)。キーバインドがバッティングしているわけでもないので原因がよくわからないのだけど、不便なので個別にmap書いて対応してる。

Mac

imap <C-f> <Right>
imap <C-b> <Left>
imap <C-n> <Down>
cmap <C-f> <Right>
cmap <C-b> <Left>
cmap <C-n> <Down>
map  <M-c> <C-v><M-c>
imap <M-a> <C-v><M-a>
imap <M-z> <C-v><M-z>
imap <M-x> <C-v><M-x>
imap <M-c> <C-v><M-c>
imap <M-v> <C-v><M-v>
cmap <M-a> <C-v><M-a>
cmap <M-z> <C-v><M-z>
cmap <M-x> <C-v><M-x>
cmap <M-c> <C-v><M-c>
cmap <M-v> <C-v><M-v>

なぜか<C-p><Up>だけは効く。<M-c>は効いてるっぽいけどそのままだとビープ鳴ってウザいので書く。
ちなみに<M-c>のmap先はYでもいいんだけど、フレーム分割されたページだとYでヤンクできなかったのでこうした。

Windows

メイン環境じゃないのでちゃんと検証してないです。
よく考えたら noremap <C-c> はページのロードを中止する機能と被ってた。のでteramako-vimperatorrcを参考にテキスト選択してたらコピー、 してなかったらロードを中止するよう変更。

inoremap <C-a> <C-v><C-a>
inoremap <C-z> <C-v><C-z>
inoremap <C-x> <C-v><C-x>
inoremap <C-c> <C-v><C-c>
inoremap <C-v> <C-v><C-v>
cnoremap <C-a> <C-v><C-a>
cnoremap <C-z> <C-v><C-z>
cnoremap <C-x> <C-v><C-x>
cnoremap <C-c> <C-v><C-c>
cnoremap <C-v> <C-v><C-v

" Add Mapping <C-c> copy or stop loading
js <<EOM
mappings.addUserMap([modes.NORMAL,modes.VISUAL],['<C-c>'], 'Copy selected text or stop loading',
    function(){
        var sel = window.content.window.getSelection().toString();
        if (sel){
            copyToClipboard(sel,true);
        } else {
            BrowserStop();
            echo('Stopped loading !');
        }
    }
);
EOM

noremap は再帰しないmap。上の例だと無限ループするのを防ぐ。

コピーやペーストのmapは、コマンドライン・バッファの出力をでコピーとかテキストエリアで簡単にペーストする方法 - hogehogeにあるように<C-Insert><S-Insert>使ってもいいかも。

ただ、Insertでもうちの環境だとバッファウィンドウのテキストはコピーできなかったので、どっちのmapでも特に違いは無さそう。

2008年6月28日

VimperatorでQuick Linkから開くページを全部新しいタブにする

Twitter / やまある: VimperatorでQuick Linkから開くペー...

VimperatorでQuick Linkから開くページを全部新しいタブにしたいんだけどどうすればいいかな

それ noremap で出来るよ。

noremap f F
noremap F f

これで、f で新規タブ、F で現在のタブに開くようになる。

2008年6月27日

gmperator.js でさらなる変態設定の幕が開いた

feedSomeKeys.js と gmperator.js と autocommand との連携 - hogehoge にも追記されてるけどgmperator.js とfeedSomeKeys.js の連携がさらに強化された。id:teramako++

#vimperator@IRCNet より抜粋
01:33 teramako: liberator.autocommands.add('GMActiveScript', "\nldrize\.user\.js$",
01:33 teramako: 'js liberator.plugins.feedKey.setup([["J","j"],["K","k"],"p","l","v","o","i","s"]);');
01:33 retlet: よしきたく
01:33 teramako: で動いたよ
01:33 retlet: わーい
01:39 teramako: しかし、設定が面倒いな
01:42 retlet: む、さっきのてらまこたんのコードで
01:42 retlet: http://www.google.co.jp/
01:42 retlet: でも実行される
01:43 teramako: うん、URL関係なくldrizeが発動していれば実行されるよ
01:43 teramako: URLのフィルターかけたい場合は
01:43 retlet: ああ、そっか。
01:43 teramako: "^http://hogehoge.*\nldrize\.user\.js$"とかするとよいですよ
01:44 retlet: SITEINFOがなくてもLDRizeは実行されてるんだよな
01:44 retlet: なるほど。
01:44 retlet: 把握しますた!
01:47 teramako: SITEINFOがあるかどうかで判断するのはちょい難しいかも(出来ないことはないです)
01:48 teramako: :echo plugins.gmperator.currentSandbox.LDRize.getSiteinfo() で判断は可能
01:51 teramako: 'js if(plugins.gmperator.currentSandbox.LDRize.getSiteinfo()) plugins.feedKey.setup([["J","j"],["K","k"],"p","l","v","o","i","s"]);');
01:51 retlet: ふむふむ
01:51 teramako: コマンド部分をこんな感じにするといけるかな
01:53 retlet: やばい
01:53 retlet: てらまこたん愛してる
01:53 teramako: hya-
01:53 retlet: うちに来てすいれんさんをfuckしていい
01:54 teramako: それは謹んで自体しまふ
01:55 retlet: ( ´・ω・)
01:56 retlet: でもやばいこれはさらなる変態設定の幕開けだ
01:56 retlet: (*゚∀゚)=3
01:58 teramako: まぁたしかにautocmdでサイト毎の最適化は変態だよな。
01:59 retlet: 個人最適化の果てに皆の幸せがある!
02:00 retlet: SITEINFOで共有したいくらいですね

2008年6月25日

Awesomebarの補完対象にBookmarkletを含める。ついでに補完件数を増やす

wildoptions=autoとcomplete=lが凄い件 - Dis Communication - 符号無し で紹介されている set complete=l を使うと、Bookmarkletが補完対象にならなくて困ってたんだけど、about:config で browser.urlbar.filter.javascript = false にすれば補完してくれることに気付いた。

あと補完の件数が12と少なすぎなので、browser.urlbar.maxRichResults = 50 で50件まで出すことにした。

js <<EOM
  liberator.options.setPref('browser.urlbar.filter.javascript', false);
  liberator.options.setPref('browser.urlbar.maxRichResults', 50);
EOM

id:Trapezoid に「set! でprefもいじれるよ」って教わった。知らなかった! というわけで、以下でも出来る。

set! browser.urlbar.filter.javascript=false
set! browser.urlbar.maxRichResults=50

VimperatorのUI前提での設定なので、about:configで直接指定したりuser.jsに追加するよりは上記のように.vimperatorrcに書いた方がわかりやすい。

参考: The Places frecency algorithm - MDC コメントで指摘されたのでリンク先変更しました。

2008年6月24日

Vimperatorと、ウェブアプリやUserscriptのショートカットキーを共存させるfeedSomeKeys.jsプラグイン

現在は出来ることは基本的に変わらないけどより簡易な記述が可能になったfeedSomeKeys_2.jsがあるのでそっちを使うと良いです。と今更ながら追記。

#vimperator@IRCNet で id:trapezoid と id:otsune から ex_autocmd.js が無くてもLocationChangeで出来るよ。と教わったので関連部分を直しました。Thx!!

どうも feedSomeKeys.js を使っている人がいないようなので書く。

Vimperatorを使っていると、ウェブアプリケーションやUserscriptのショートカットキーがVimperotarとバッティングして使えない。ということがよくある。

こういう場合、基本的にはC-qでPATH THROUGHモード(Vimperatorのキーバインドを無効化する)にすることで一応解決するんだけど、はっきり言ってめんどくさいし、今どっちのモードだったか忘れててギャー!ってなるし、関係ないキーまで無効化されるのはやだ(tabopenやタブ切り替えのキーは常に使いたい!)。

ということで、feedSomeKeys.js の登場です。

feedSomeKeys.js は、任意のURLで任意のキーをスルーする(Vimperatorで処理せずにブラウザに渡す)ためのPlugin(URLの指定には ex_autocmd.js を併用する必要がある)

具体的には、以下のようなことができる。

  • Gmailのショートカットキーを使いつつ、Vimperatorも使う
  • livedoor Readerで j,k,a,s,v,p を使いつつ、Vimperatorも使う
  • Tumblr + LDRize + ReblogCommand 環境で t (Reblogキー) を i に置き替えて使う(Vimperatorの t も使いたいから)

autoIgnoreKey.js などで自動的にPATH THROUGHモードに切り替えるのと違って、その他のVimperatorのキーバインドは生かしたまま、指定したキーだけをスルーできるのが特徴。

続きを読む: Vimperatorと、ウェブアプリやUserscriptのショートカットキーを共存させるfeedSomeKeys.jsプラグイン

2008年5月28日

Vimperatorプラグインのsbmcommentsviewer.jsにtagsAndComment追加した

sbmcommentsviewer.jsはページに付けられた各種SBMのタグやコメントをバッファウィンドウに表示するVimperatorプラグイン。

map b :viewSBMComments<CR>

としておけばbキー一発でブクマコメントを一覧できて非常に便利なんだけど、タグが長すぎるとコメントの表示領域が圧迫されて見辛いことが。
というわけで、タグとコメントを同じ列に表示するtagsAndCommentフォーマットを追加してみた。

使い方は、コマンド実行時に-fオプションを使用するか、

:viewSBMComments -f id,timestamp,tagsAndComment

.vimperatorrcに設定を記述する。

let g:def_sbm_format = "id,timestamp,tagsAndComment"

これが、

retlet.net - Vimperator30D730E930B030A430F3306Eime_controller.js304C57305473306B4FBF5229 - Firefox
Uploaded with plasq's Skitch!

こうなる。

retlet.net - Vimperator30D730E930B030A430F3306Eime_controller.js304C57305473306B4FBF5229 - Firefox
Uploaded with plasq's Skitch!

あとついでに、ユーザーアイコンとユーザー名が上下中央揃えになるようにhtmlを少しいじった。
他にも見た目いじりたいなーと思ったんだけど、良い感じにならなかったんでuserstyel用にidとclass振るだけに留めた。

2008年5月19日

Vimperator 1.0でset hintstyleが効くようになった

ちょっと前まで設定は反映されているはずのに何故か見た目に変化がなかったHit-a-Hintのスタイル指定が正しく効くようになっていた。ひと月くらいアップデートしていなかったのでいつの間に直ったのかわからないけど。

これで、ユーザースタイルシートでフォントサイズを大きくするなんて面倒なことはせずに.vimperatorrcで設定できる。

set hintstyle+= font-size:15px;

こんな感じ。+を付けるとデフォルトの設定を上書きせずに値を追加できる。

2008年4月12日

Vimperatorプラグインのime_controller.jsが地味に便利

ime_controller.jsは ex mode および textarea mode への移行時にIMEを指定の状態に切り変えるVimperatorプラグイン。

Firefox 3b5からはex mode時のIME On/Offをタブとは別に保持するようになったんだけど(ちなみにタブ毎にも保持してる)、:[tab]open ほげほげ<CR>とかしたあとにex modeに入るとIMEがOnになっているわけでちょっと使いづらかった。

設定は.vimperatorrcに書く。

let g:ex_ime_mode = "inactive"  
let g:textarea_ime_mode = "inactive"

オプションは4種類。

"auto"     : No change  
"active"   : Initially IME on  
"inactive" : Initially IME off  
"disabled" : Disable IME