- ベストアンサー
mac/linux vim tabキーの設定
- mac/linuxのvimrcでtabキーの設定方法についての質問です。
- vimrcのmapを使って<C-TAB>と<C-S-*>のキーマッピングを設定したいがうまくいかない。
- <C-TAB>が反応せず、<C-S-*>の設定方法がわからず困っている。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No1です。 ><F1>や<F2>などにはちゃんと問題なく設定ができるようです。 すいません。確認せずに書いてしまいました。terminfoが正しければ出来ますね。 たとえば、TERM環境変数が xterm とか vt100 なら、F1 が押されると Esc O P という3文字がアプリに送られ、terminfoに kf1 (F1キーのこと) が \EOP と定義されていれば、F1 と認識されます。 >もし何か解決に至る方法があれば教えて下さい。 X Window Systemを使わなくなって久しいので、具体的な方法は忘れてしまいましたが、リソースファイル(app-defaultとか)に書くことで、Xのイベントを置き換えることが出来ます。 たとえば、ctrl-TAB が押されたら、なんかのキーシーケンス順番に押されたように設定することが可能です。vim のmapの方では、その置き換えたキーシーケンスに対してmapすればいい。 仕組みとしては、 1.キーを押すとXが検知して、フォーカスのある端末エミュレータに、キーイベントを送る 2. 端末エミュレータは、キーイベントに相当するキーコードを、端末エミュレータ上で動いているソフト(bashとかvimとか)に渡す たとえば、a キーダウン&アップというキーイベントを受け取ったら、'a' のコードを渡す shiftキーダウン→aキーダウン&アップ というイベントシーケンスだったら、'A' のコードを渡す 3. このとき、端末エミュレータのXリソースで、キー変換が指定されていればそれに従って変換して渡す 4. キーシーケンスを受け取ったvimがmapの情報を見て動作する F1の例で言うと、<ESC>OP に対して、マップ定義すれば F1 に定義したのと同じ効果 リソースファイルでのキーイベントの置き換え方法ってちょっとググってみたけどあまり情報が無いですね。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
状況がよく分かりませんが、おそらくこういうことではないかと。 vim は、Xの直下で動くモードと、コンソール上で動くモードがあります。gvim か vim -g が前者。vim だと後者。 コンソール上で動くモードだと、コンソールから渡される文字コードを解釈することしか出来ないので、ctrl-TAB は TAB と同じだし、ctrl-shift-A だと ctrl-A と同じです。文字コードが同じなので。 <F1>とかも効かないはず。そんな文字コードないので(F1を押したときに入力されるエスケープシーケンスを使えばmap定義できます)。 gvimで起動すると、Xのキープレスイベントを受け取れるので、ctrl-TAB と TAB を区別できます。他も同様。
お礼
なるほど…そういうことだったんですね。 たしかにgvimではなく普通のvimを使っています。 原因はこれでわかりましたが、この場合だと、どのようにしても<C-S-a>や<C-TAB>などの設定はできないのでしょうか? できればgvimではなく普通のvimがいいのですが、もし何か解決に至る方法があれば教えて下さい。 ちなみに今確認したところ、<F1>や<F2>などにはちゃんと問題なく設定ができるようです。