- 2008年7月 7日 18:07
- Vimperator
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でも特に違いは無さそう。