Hatena::ブログ(Diary)

Vivre Revive

2008-07-23

うちのVimperator設定を晒してみる

| 20:16 |

はじめに

これらはVimperatorをお使いの諸先輩方の素晴らしい設定を参考にさせていただいたもので、彼らにまず多大な敬意を表したいと思います。これからVimperatorを使う方の参考に少しでもなればと、拙いまとめではありますが晒させていただきます。なお、私は素人全開100%ですので間違いも多々含まれていると思います。変なところがあっても鵜呑みしないよう、予めそこらへんよろしく。

導入したもの

.vimperatorrc

" 1.2pre (created: 2008/07/11 21:30:06)

" Options
"メニュー/ツール/ブックマークバーを表示
set guioptions=mTb
"ブラウザタイトルの設定
set titlestring=Mozilla Firefox 3
"エラー時のビープ音をビジュアルベルに
set visualbell
"ビジュアルベルを無効化
set visualbellstyle=display:none;
"詳細表示を7行に(最大値=9)
set verbose=7
":[tab]open時の補完設定(s=検索エンジン+キーワードURL,l=ロケーションバーの補完機能を利用)
set complete=sl
"コマンド入力時にコマンド名を自動補完
set wildoptions=auto
"デフォルト検索エンジン(検索バーの管理→キーワード,うちではg=google)
set defsearch=g
"サジェストエンジンの設定
set suggestengines=g
"検索語のハイライト
set hlsearch
"開いているページが1つならタブ非表示
set showtabline=1
"履歴を保存
set history=1000
"以下のとき新しいタブで開く
set activate=homepage,quickmark,tabopen,paste
"ヒント機能(f,F押下時)の見た目設定(効いてない?)
set hintstyle+= font-family: Verdana , monospace; font-size:20px; color:white; background-color:blue; border-color:ButtonShadow;


" Mappings
"j/kの移動量を5倍に
noremap j 5<C-e>
noremap k 5<C-y>
"J/KにPageDown,PageUpを割り当て(LDRizeが効いている場合でも指のポジションを動かさずに済む
noremap J <PageDown>
noremap K <PageUp>
"h/lで戻る/進む
noremap h <A-Left>
noremap l <A-Right>
"H/Lでタブ移動
noremap H gT
noremap L gt
"←/→でタブ移動
map <Left> <C-p>
map <Right> <C-n>
"Shift+←/Shift+→でタブ位置変更
map <S-Right> :tabmove! +1<CR>
map <S-Left> :tabmove! -1<CR>

"コピー&ペーストなどOSショートカットが効くように
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>

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

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

"LDRize_Cooperationをトグル
map q <esc>:toggleldrc<cr>

"はてブ追加
noremap a <esc>:hb<space>[

"ダイアログ表示してブックマーク追加
map ,a <esc>:dialog addbookmark<cr>

"はてブ情報表示
map b <esc>:hbinfo<cr>

"はてブタグ読み込み
map ,b <esc>:hbtags<cr>

"タブを閉じる(browser_object.js)
map x dd

"Vimperatorからminibufferコマンド
map <C-:> :m<Space>

"Ctrl+rで再起動,Ctrl+hでヘルプ
map <C-r> :restart<CR>
map <C-h> :help<CR>

"niconicoplaylist.js関連
map ,nn <esc>:nnpplaynext<cr>
map ,na <esc>:nnppushallvideos<cr>
map ,nt <esc>:nnppushthisvideo<cr>
map ,nc <esc>:nnpclear<cr>
map ,nl <esc>:nnpgetlist<cr>
map ,nr <esc>:nnpremove<Space>
map ,ni <esc>:nicoinfo<cr>
map ,np <esc>:nicopause<cr>
map ,nm <esc>:nicomute<cr>
map ,nv <esc>:nicommentvisible<cr>
map ,nz <esc>:nicosize<cr>
map ,ns <esc>:nicoseek<cr>

" C-cでテキスト選択してたらコピー、 してなかったらロードを中止する
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

" Plugins
" ===================================================
" ime_controller.js
let g:ex_ime_mode = "inactive"
let g:textarea_ime_mode = "inactive"

" googlesuggest.js
map s :google<Space>

" migemo_hint.js
set hintmatching=custom

" ldrize_cooperation.js
let g:ldrc_captureMappings = "['j','k','p','o','?']"
let g:ldrc_intelligence_bind = "false"
let g:ldrc_skip = "0.25"

" feedSomeKeys.js
autocmd LocationChange .* :fmapc

" livedoor Reader/Fastladder/OpenFL
js <<EOM
autocommands.add('LocationChange',/reader\.livedoor\.com\/reader\//,
  'js plugins.feedKey.setup("r ? j k s a p v c <Space> <S-Space> z Z < > q w b i g u".split(/ +/));');
EOM
autocmd LocationChange http://(reader\.livedoor\.com|fastladder\.com|0\.0\.0\.0\:3000)/reader/ :fmap o vj
autocmd LocationChange http://(reader\.livedoor\.com|fastladder\.com|0\.0\.0\.0\:3000)/reader/ :fmap J <Space>
autocmd LocationChange http://(reader\.livedoor\.com|fastladder\.com|0\.0\.0\.0\:3000)/reader/ :fmap K <S-Space>
autocmd LocationChange (?!http://(reader\.livedoor\.com|fastladder\.com|0\.0\.0\.0\:3000)/reader/) :set! browser.tabs.loadDivertedInBackground=false
autocmd LocationChange http://(reader\.livedoor\.com|fastladder\.com|0\.0\.0\.0\:3000)/reader/ :set! browser.tabs.loadDivertedInBackground=true

" Reblog用 (要tombloo.xpi)
autocmd LocationChange http://(reader\.livedoor\.com|fastladder\.com|0\.0\.0\.0\:3000)/reader/ :fmap i t

" Tumblr (要ReblogCommand)
autocmd LocationChange http://.*\.tumblr\.com/ :fmap i t

"niconicoplaylist.js (http://d.hatena.ne.jp/janus_wel/20080711)
" 再生リストの表示数を 7 個に
" plugin : niconicoplaylist_cooperation.js
let g:nnp_coop_numoflist='7'

javascript <<EOM

// [N],nn
// N 番目の動画を再生する。
// 指定なしの場合次の動画が再生される。
liberator.mappings.addUserMap(
    [liberator.modes.NORMAL],
    [',nn'],
    'play next item in NicoNicoPlaylist',
    function(count) {
        if(count === -1) count = 1;
        liberator.execute(':nnpplaynext ' + count);
    },
    { flags: liberator.Mappings.flags.COUNT }
);

// [N],nr
// 上から N 個の動画を削除する。
// 指定なしの場合一番上の動画が削除される。
liberator.mappings.addUserMap(
    [liberator.modes.NORMAL],
    [',nr'],
    'remove item in NicoNicoPlaylist',
    function(count) {
        if(count === -1) count = 1;
        for(var i=0 ; i<count ; ++i) liberator.execute(':nnpremove');
        liberator.execute(':nnpgetlist');
    },
    { flags: liberator.Mappings.flags.COUNT }
);

EOM

javascript <<EOM
// [N]-
// N 秒前にシークする。
// 指定なしの場合 10 秒前。
liberator.mappings.addUserMap(
    [liberator.modes.NORMAL],
    ['-'],
    'seek by count backward',
    function(count) {
        if(count === -1) count = 10;
        liberator.execute(':nicoseek! ' + '-' + count);
    },
    { flags: liberator.Mappings.flags.COUNT }
);

// [N]+
// N 秒後にシークする。
// 指定なしの場合 10 秒後。
liberator.mappings.addUserMap(
    [liberator.modes.NORMAL],
    ['+'],
    'seek by count forward',
    function(count) {
        if(count === -1) count = 10;
        liberator.execute(':nicoseek! ' + count);
    },
    { flags: liberator.Mappings.flags.COUNT }
);
EOM


"Appearance Change with StyleChanger.js
let g:styles = "vimperator"

" Abbreviations
" ======================================================================
"読み込み終了のお知らせ
echo "done."
source! ~/_vimperatorrc.local
" vim: set ft=vimperator:

導入したプラグインリスト

合計 20個

入手先はほとんどCodeRepos

bookmarktoolbar-hint.jsブックマークツールバーにもヒント機能を参照
browser_object.jsdrtで「ここから右のタブ閉じる」rstで「同ホストのタブを全部リロード」とか参照
char-hints-mod.jsクイックヒントを数字から英字に
copy.js:copyコマンドでCopy URL+的な機能を参照
direct_hb.jsはてなブックマークに開いているページを直接追加参照
feedSomeKeys.js任意のURLで任意のキーをブラウザに渡す参照
googlesuggest.jsタブ補完時にGoogleSuggestをつかって補完を可能にする
hatenabookmark_show.js:hbinfoコマンドではてなブックマークを表示
hatenaStar.js:hatenastarコマンドではてなスターを打つ参照
ime_controller.jsコマンド入力及びテキスト入力時のIMEを指定の状態に切り替える参照
ldrize_cooperation.jsLDRizeVimperatorを協調動作させる参照
ldrize_cooperation_fetch_flv.js:fetchflvコマンドでニコニコ動画をDL参照
lookupDictionary.js:eijiro,:gooコマンドで辞書検索
migemo_hint.jsfのヒント機能時にローマ字でリンクの日本語を絞り込み参照
nicontroller.jsニコニコ動画キーボードで操作参照
nnp_cooperation.jsNicoNicoPlaylistと協調動作するプラグイン 参照
sbmcommentsviewer.jsソーシャルブックマークのコメントを表示参照
stylechanger.jsStylish的なプラグイン:コマンドでリロード可能など参照
twitter.jstwitterに投稿したり情報表示したり参照
wassr.jswassrに投稿したり情報表示したり参照

困ってること

  • やっぱりset hintstyle+が効いてない気がする
  • F押したときはバックグラウンドタブでガシガシ開きたいけど、やり方がわからん
    • :set! browser.tabs.loadDivertedInBackgroundあたりを使うのかな

参考にさせていただいたサイト(ほんの一部)

oooo 2008/07/23 20:46 参考までに。

Vimperatorで;bでリンクを新しいバックグラウンドのタブに開くようにする。
http://anond.hatelabo.jp/20080709195527

lillilifelillilife 2008/07/27 18:46 情報ありがとうございます。
見よう見まねでxpiビルド試しましたが、
chromeが本体に登録できないとかでなんだかうまくいかないので、
素直に本体にマージされるのを待とうと思います。

cool_ni_ikoucool_ni_ikou 2008/07/28 00:29 [shift]+[f]でバックグランドタブでリンクが開きます。言っていることとは全く関係ないことだったらごめんなさい。

lillilifelillilife 2008/07/28 01:22 えっマジっすか!?
うちのVimpでは[Shift]+[f]だと新しいタブで開くには開くんですが、
フォアグラウンド(新しいタブがアクティブ)で開いてしまいます。
アドオンが干渉してたり、どこかに設定でもあるのかなあ