窓使いの憂鬱でいろいろvi風キーバインドにしてみる
vimに慣れてくるとその他いろいろなところでvi風キーバインドが使いたくなってくる。
特にメールを書くときなどが顕著だ。
外部エディタとしてのvimも試してみたがやはりメーラからvimに遷移するところがいまいち使いにくい。
vim上で動かすメーラとかもあるみたいだが使い勝手は良いだろうか。少なくとも会社では使えなさそうなので、
窓使いの憂鬱
で、メーラをvi風キーバインドで操作できるようにしてみた。
以下、vi.mayu という名前で ViMode という keymap を定義している。
私の場合は、「Escape」もしくは「Ctrl + L」で ViMode に入るようにしている。
というのは、普段 vim を使う際にも Escape の代わりに C-L で 編集モードへ移行しているからだ。
※2008/9/19 v押下からはじまるビジュアルモードに対応。その他細かい修正。
※2008/10/5 cw等、ワード単位での編集に対応。rに対応。その他細かい修正。
# vi風モード設定 # =============================================== keymap ViMode : Global ################################################# # キーマスク(誤操作防止) ################################################# key L0-*S-A = key L0-*S-B = key L0-*S-C = key L0-*S-D = key L0-*S-E = key L0-*S-F = key L0-*S-G = key L0-*S-H = key L0-*S-I = key L0-*S-J = key L0-*S-K = key L0-*S-L = key L0-*S-M = key L0-*S-N = key L0-*S-O = key L0-*S-P = key L0-*S-Q = key L0-*S-R = key L0-*S-S = key L0-*S-T = key L0-*S-U = key L0-*S-V = key L0-*S-W = key L0-*S-X = key L0-*S-Y = key L0-*S-Z = ################################################# # キーシーケンス定義 ################################################# keyseq $GoToHome = Home ################################################# # vi風モード(編集モード)への入り方 # Lock0 = vimモード(編集モード) ################################################# key C-L = &Toggle(Lock0,on) key Escape = &Toggle(Lock0,on) ################################################# # 通常モード(挿入モード)への入り方 ################################################# key L0-I = &Toggle(Lock0,off) key L0-A = &Toggle(Lock0,off) key C-M = Enter &Toggle(Lock0,off) # 行頭から挿入 key L0-S-I = $GoToHome &Toggle(Lock0,off) # 行末から挿入 key L0-S-A = End &Toggle(Lock0,off) # 現在位置から行端までを削除して編集 key L0-S-C = S-End C-X &Toggle(Lock0,off) # 次行から挿入 key L0-O = End Return &Toggle(Lock0,off) # 前行から挿入 key L0-S-O = $GoToHome Return Up &Toggle(Lock0,off) ################################################# # 両モード共通設定 ################################################# key *S-C-P = *S-Up key *S-C-N = *S-Down ################################################# # 通常モード(挿入モード) ################################################# # Oneストロークだけ編集モード keymap ViOneShot : ViMode key P = C-V key H = Left key J = Down key K = Up key L = Right keymap ViMode key C-O = &Prefix(ViOneShot) ################################################# # vi風モード(編集モード) ################################################# #------------------------------------------------ # カーソル移動 key L0-*S-K = *S-Up key L0-*S-J = *S-Down key L0-*S-L = *S-Right key L0-*S-H = *S-Left key L0-*S-C-A = *S-Home key L0-*S-C-E = *S-End key L0-*S-C-U = PageUp key L0-*S-C-D = PageDown key L0-W = C-Right key L0-B = C-Left #------------------------------------------------ # カット&コピー # Lock2 : 行コピーの場合にはon ### コピーモード keymap ViCopyMode : ViMode # 行コピー key L0-Y = $GoToHome S-End C-C End &Toggle(Lock2,on) # 単語コピー key L0-W = &Toggle(Lock2,off) S-C-Right C-C Right ### 切り取りモード keymap ViDeleteMode : ViMode # 行切り取り key L0-D = $GoToHome S-End C-X Delete &Toggle(Lock2,on) # 単語切り取り key L0-W = &Toggle(Lock2,off) S-C-Right C-X ### 置き換えモード keymap ViReplaceMode : ViMode # 行置き換え key L0-C = &Toggle(Lock0,off) $GoToHome S-End C-X &Toggle(Lock2,on) # 単語置き換え key L0-W = &Toggle(Lock2,off) &Toggle(Lock0,off) S-C-Right C-X ### 一文字置き換えモード keymap ViCharaReplaceMode : Global ### 編集モード keymap ViMode # コピーモードに入る key L0-Y = &Prefix(ViCopyMode) # 切り取りモードに入る key L0-D = &Prefix(ViDeleteMode) # 置き換えモードに入る key L0-C = &Prefix(ViReplaceMode) # 一文字置き換えモードに入る key L0-R = S-Right &Prefix(ViCharaReplaceMode) # 次行に貼り付け key L2-L0-P = End Return $GoToHome C-V # 前行に貼り付け key L2-L0-S-P = $GoToHome Return Up C-V # 貼り付け key ~L2-L0-*S-P = C-V # Delete key L0-X = Delete # 現在位置から行末までコピー key L0-S-Y = S-End C-C End # 現在位置から行末まで切り取り key L0-S-D = S-End C-X #------------------------------------------------ # Undo&Redo key L0-U = C-Z key L0-C-R = C-Y #------------------------------------------------ # ビジュアルモード # Lock2 : ビジュアルモードからのコピーの場合にはon keyseq $VisualModeOff = Insert Insert &Toggle(Lock0,on) &Toggle(Lock1,off) ### Lock1 をビジュアルモードとする key L0-V = &Toggle(Lock1,on) key *L0-L1-V = $VisualModeOff key *L0-L1-Escape = $VisualModeOff key *L0-L1-C-L = $VisualModeOff key L0-S-V = $GoToHome S-End &Toggle(Lock1,on) ### ビジュアルモード中のカーソル移動 key L1-K = S-Up key L1-J = S-Down key L1-L = S-Right key L1-H = S-Left key L1-Up = S-Up key L1-Down = S-Down key L1-Right = S-Right key L1-Left = S-Left key L1-C-A = S-Home key L1-C-E = S-End key L1-Home = S-Home key L1-End = S-End key L1-C-U = S-PageUp key L1-C-D = S-PageDown key L1-PageUp = S-PageUp key L1-PageDown = S-PageDown key L1-W = S-C-Right key L1-B = S-C-Left ### 選択範囲の操作 key L1-Y = &Toggle(Lock2,off) C-C $VisualModeOff key L1-D = &Toggle(Lock2,off) C-X $VisualModeOff key L1-C-C = &Toggle(Lock2,off) C-C $VisualModeOff key L1-C-X = &Toggle(Lock2,off) C-X $VisualModeOff #------------------------------------------------ # 検索 key L0-~S-N = F3 key L0-S-N = S-F3 # ===============================================
そして .mayu 側でのコール。
ここでは、BeckyとThunderbirdで使えるようにしています。
include "vi.mayu" # vi風モード設定 # Becky用設定 window Becky /B2\.exe/ : ViMode key S-C-H = C-H # Thunderbird用設定 window Tunderbird /thunderbird\.exe/ : ViMode
というか、他にもやってる人たくさんいそうだなー。
だれかよく出来たvi風の設定を知っていたら教えてくださいっ!