2011-03-15 23 views
8

通常、ウェブ上で興味深いzshキーバインド設定(bindkeyコマンド)が見つかりました。私の質問は、これらのエスケープされたシーケンスがマップされたものをどのように解釈するのですか?例えば、ここにoh-my-zshkey-bindings.zshzshのバインドキーのエスケープシーケンスを解釈する

bindkey "^[[H" beginning-of-line 
bindkey "^[[1~" beginning-of-line 
bindkey "^[[F" end-of-line 
bindkey "^[[4~" end-of-line 

からの抜粋であるこれらのキーマップが示されない方法についての言及はありますか?また、それはzsh特有のものかプラットフォーム固有のものなのでしょうか?

私はcatまたはCtrl-Vのいずれかを使用して、特定のキーに対応するエスケープシーケンスを見つけることができることにご注意ください。リバースマッチを見つけるために力を入れることができるとすれば、キーボードには存在しないキー(MacノートパソコンのHome/Endなど)では機能しません。したがって、私は物理的なキーボードに関係なくキーを決定する方法を好むでしょう。

答えて

4

典型的なunix/linuxイベントの流れについて言えば、画像はおおよそ次のとおりです。

ターミナルエミュレータプログラムはボタンのようなXイベントを受信し、別のボタンがリリースされます。これらのイベントは、たとえばxevユーティリティで追跡できます。端末エミュレータは、これらのイベントをエスケープシーケンスに変換します。

この翻訳は石では設定されていません。設定が可能です。さまざまな端末エミュレータの設定が異なります。 ESCある

XTerm*VT100*Translations:#override \ 
Ctrl<Key>Left:   string(0x1B) string(OD) \n\ 
Ctrl<Key>Right:   string(0x1B) string(OC) \n\ 

メモとして0x1B:たとえば のxterm翻訳は の.Xdefaultsそのように設定することができます。 ESCは、 ^[]と表示されます。

zshはzle(同じ目的のためにbashはreadlineライブラリを使用します) を使用して、入力行を移動して編集アクションを実行するシーケンスの一部を解釈します。

次のテキストでさらに詳細を説明してください。

Zsh Line editor description

Wikipedia article on escape sequences

Xterm Control Sequences

+0

しかし、それはX11の下で実行されなくてもよい他の端末エミュレータを含んでいません。 –

+0

右。これは多くの場合、多くの場合です。多くのteminarals、多くのシェル、多くのキーボードドライバなど。それらのすべてが異なって設定されています。私は、例えば、gnome端末のどこで翻訳をセットアップするかを見つけることができませんでした。 – horsh

+0

ありがとうございます。私の質問に答えるかどうかわからないので、私の無知を許してください。指定された参照を参照しても、エスケープされたシーケンスを対応するキーシーケンスに変換する方法が見つかりませんでした(「^ [[H」) – ejel