AltUpを押すとA
端末画面に印刷されます。押してAltDown印刷してもB
同じことが起こります。
私が知っている他のキャラクター。
AltLeft=D
とAltRight=C
このコマンドの目的は何ですか?
答え1
端末の設定方法に応じて、入力はキーをAlt+Key順番に入力するのと同じであるため、ESC文字(またはまたは)の後にその文字または文字シーケンスが送信されます。EscKey\e
^[
\033
Key
を押すと、Upほとんどの端末エミュレータはアプリケーションキーボードモードになっているかどうかに応じて3文字程度を\033[A
送信します。\033OA
1つ目は、端末に出力するときにカーソルを上に移動するエスケープシーケンスに対応します。これにより:
printf '\nfoo\033[Abar\n\n'
前の行の後に書かれたものを見ることbar
ができます。foo
これにより:
stty -echoctl; tput rmkx; read foo
矢印キーを押すと、カーソルが動いていることがわかります。
アプリケーションが端末でその文字シーケンスを好むかzsh
読み取ると、それはterminfoデータベース(関数)を介して時間内に送信されたエスケープシーケンスであることを知っているので、これを「up」操作として解釈します。vi
kcuu1
Up
sendなどのAlt-Up一部の端末には(または)などのエスケープシーケンスがあり、他の端末では、などのキーの組み合わせで使用するときに、このタイプのキーに対して別々のエスケープシーケンスを提供または提供します。rxvt
eterm
\033
Up\033\033[A
\033\033OA
xterm
gnome-terminal
AltShiftCtrl
通常\033[1;3A
はに送信されますAlt-Up。
端末に送信されると、このシーケンスもカーソルを上に移動します(2番目の引数(3)は無視されます)。該当事項はありません鍵盤Alt-Upキーなので、受信または発信時に送信されるのと同じシーケンスです。アプリケーションキーボードモード。
今や\033\033[A
、\033[1;3A
多くのアプリケーションはこれらのシーケンスの用途を知りません。これらのキーの組み合わせで送信される文字を定義する機能がないため、terminfoデータベースは役に立ちません。
彼らは順序を説明するために最善を尽くします。たとえば、エスケープシーケンスとしてbash
解釈され、これについて何も知らないので、何もしません。これに続いて、既知の一致する文字シーケンスが見つからないとすぐに読み取りを停止します。エスケープシーケンスが何で始まるかわからないので、そのシーケンスをスキップして残りの部分を読み、行エディタに挿入します。\033[1;3
A
zsh
\033[1
;3A
多くのアプリケーション(たとえば、vi
ベースのアプリケーション(使用されている修正バージョンに注意))を使用すると、任意の文字シーケンスのバインディングを追加できます。zsh
readline
gdb
bash
bash
readline
たとえば、次のようにzsh
バインドできます。Alt-UpAlt-Down
bindkey '\e[1;3A' history-beginning-search-backward
bindkey '\e[1;3B' history-beginning-search-forward
これは、現在のコマンドラインから現在のカーソル位置までコマンドライン履歴を使用して前後に検索するため、前のコマンドを呼び出すのに非常に便利です。
答え2
Crtl+を使用してvキーボードの入力コードを返すことができます。矢印キーを使用してこれを実行すると、および[[D^
値[[C^
が表示されます。 +矢印キーにはデフォルトのバインディングがないので、文字コードを個別に印刷するようです。ただし、readlineライブラリ構成ファイルのローカルバージョンを生成する場合:[[A^
[[B
Alt
$ cp /etc/inputrc ~/.inputrc
そして1行を追加してください:
"\e[1;3C": "sometexthere"
+の入力コードはどこにあり[1;3C
(+ショートカットを使用する前と同じように取得できます)、端末を再起動すると+ショートカットは「sometexthere」テキストを返し、他の+矢印ショートカットは文字の返却を停止します。Alt→CrtlvCrtl→Alt
代わりに、バインド可能なコマンドを渡すことができます。http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html#Bindable-Readline-Commands良い
"\e[1;3C": unix-line-discard
Crtl+(行削除)とu同じ効果があります。
詳細については、ここをクリックしてください。http://cnswww.cns.cwru.edu/php/chet/readline/readline.html
答え3
このAltキーは通常、次のように使用されます。円修飾子カーソルキーとファンクションキーが呼び出されます。特殊キーこれは、複数の文字を送信でき、送信された文字が変更される可能性があるためです。
たとえば、一部のユーザーは、キーをbash
押すとAltエスケープ文字が前に付いたキーが送信されると期待しています。レコードの「メタ」機能(参照terminfo(5)
)は8番目のビットを処理します。
端末に Shift キーとして機能する "metakey" があり、送信された文字のビット 8 を設定する場合、この事実は次のコマンドで表現できます。
km
。それ以外の場合、ソフトウェアはビット8がパリティビットであると仮定し、通常はクリアされます。文字列が存在する場合は、次のように変換できます。「メタパターン」 オープンとクローズは次のように表現できます。smm
そしてrmm
。
bash
これも知られている(参照ncurses FAQ)、しかしこの機能に興味がある人はほとんどいません。それにもかかわらず、Altメタモードがオフになっても「メタ」と呼ばれることに慣れています。 rxvtとxtermは(少なくとも)1990年代初頭からこの機能を使用してきました。
他のユーザー(xterm
機能が導入された後パッチ#94、1999)修飾子情報は、特殊キーが送信する文字シーケンスのパラメータとしてエンコードされると予想できます。 XTermのドキュメントでは、これらの変更されたキーを次のように指します。「PCスタイル」これを区別するファンクションキー「VT220スタイル」(修飾子なし)。変更されていないカーソルキーを送信できますがESC[A、範囲、例えばESC[5A、しなければならない5回繰り返して理解してください。xterm
最初のバージョンコンピュータスタイルキーは「5」を使用して表示されcontrol、これは反復計算との混同を避けるために将来のバージョンで変更されました。だから...
ESC[5A
アプリケーションの実行中にカーソルを5行上に移動することをお勧めします。
ESC[1;5A
control特定のキーが押されたことをアプリケーションに通知するために1行上に移動することをお勧めします。
有用な組み合わせはすでにncurses terminfoデータベースにあります。2004年:
# 2004-07-17
# * add xterm-pc-fkeys -TD
terminfo データベースは現在のバージョンを表示します。xterm+pcfキー修飾子がエンコードされる方法を示すコメントは次のとおりです。
# This fragment describes as much of XFree86 xterm's "pc-style" function
# keys as will fit into terminfo's 60 function keys.
# From ctlseqs.ms:
# Code Modifiers
# ---------------------------------
# 2 Shift
# 3 Alt
# 4 Shift + Alt
# 5 Control
# 6 Shift + Control
# 7 Alt + Control
# 8 Shift + Alt + Control
# ---------------------------------
# The meta key may also be used as a modifier in this scheme, adding another
# bit to the parameter.
(AltとMetaは必ずしも同じキーではありません)。これはビルディングブロック(他のコンポーネントで構成)xterm
端末記述が形成された。 ncurses で提供される拡張機能を使用します。1999年からユーザーは名前を定義できます。 termcapは2つの文字名と1023バイトの説明のみをサポートしているため、渡す理由はありません。用語キャップ相互作用。以下を使用するアプリケーションで簡単に使用できます。用語情報相互作用。
これで困難が発生します。アプリケーションがこれらのキーシーケンスが何を表すかを判断するには、いくつかの方法があります。
- 文字シーケンスの完全な分析
- control部分的に分析し、必要でない場合は修飾子を削除します。
- 文字の順序を辞書と比較し、そのように意味を決定するだけです。
最初のタスクを実行するプログラムはほとんどなく、一部のテキストエディタは2番目のタスクを実行します。これ~のためded
内部に1980年代後半)。このようなアプリ開発者は、bash
ほとんどの情報が次のとおりであると仮定し、3番目のパスを選択します。用語キャップ。あるいは、termcap / terminfo情報を含むテーブルを作成し、最良の情報を提供するインターフェイスを使用することもできます。 xterm
これは以下のために行われます。tcap クエリfunction -vim
実際のファンクションキー割り当てを提供します。
比較された文字列のうち、bash
受信した文字列と一致する文字列がないため、混乱して部分的な一致(たとえば、エスケープされた文字自体)を解決できます。
追加資料: