アプリ版:「スタンプのみでお礼する」機能のリリースについて

「mac/linux vim clipboard有効」
http://oshiete.goo.ne.jp/qa/7038894.html
にて質問しているものです。まだ回答が得られていませんが、別件でわからないことがあったので質問させていただきます。


.vimrcのmapの設定でnoremap <C-d> <ESC>などとすることでキーバーインドの設定ができると思いますが、一部設定の仕方がわからないキーがありました。

<C-TAB>
<C-S-*>

の2つです。

[Ctrlキー + Tabキー]に設定したいのですが、そもそも<TAB>が反応していないようです。

もう一つの<C-S-*>の方は、[Ctrlキー + Shiftキー + 何か ]に対して設定したいのですが、こちらも上手くいきません。<C-SHIFT+*>などとしても出来ず、設定方法がわからず困っています。

どちらも検索すると、特に何の問題もなく設定できるかのような感じで書かれいるページにばかりたどり着くのですが、うまく設定ができない原因などわかるかたいらっしゃいましたら教えて下さい。


「mac/linux vim clipboard有効」の方の質問ももしわかるかたいましたら是非お願いいたします。

A 回答 (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 に定義したのと同じ効果


リソースファイルでのキーイベントの置き換え方法ってちょっとググってみたけどあまり情報が無いですね。
    • good
    • 0

状況がよく分かりませんが、おそらくこういうことではないかと。



vim は、Xの直下で動くモードと、コンソール上で動くモードがあります。gvim か vim -g が前者。vim だと後者。

コンソール上で動くモードだと、コンソールから渡される文字コードを解釈することしか出来ないので、ctrl-TAB は TAB と同じだし、ctrl-shift-A だと ctrl-A と同じです。文字コードが同じなので。
<F1>とかも効かないはず。そんな文字コードないので(F1を押したときに入力されるエスケープシーケンスを使えばmap定義できます)。

gvimで起動すると、Xのキープレスイベントを受け取れるので、ctrl-TAB と TAB を区別できます。他も同様。
    • good
    • 0
この回答へのお礼

なるほど…そういうことだったんですね。
たしかにgvimではなく普通のvimを使っています。

原因はこれでわかりましたが、この場合だと、どのようにしても<C-S-a>や<C-TAB>などの設定はできないのでしょうか?
できればgvimではなく普通のvimがいいのですが、もし何か解決に至る方法があれば教えて下さい。

ちなみに今確認したところ、<F1>や<F2>などにはちゃんと問題なく設定ができるようです。

お礼日時:2011/09/30 21:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!