新しくインストールされたアーキテクチャLinux、私のシェル(bash
、、、zsh
)は矢印キーと+または+をtcsh
区別しません。Ctrlarrow keysShiftarrow keys
cat
Ctrlこのコマンドは、左矢印、+、またはLeft arrow+Shiftと同じコードを表示しますLeft arrow。^[[D
これはシェルで文字ごとの変位とテキスト選択を構成できないため、迷惑ですが、それでも文字ごとにナビゲートできるため重要な問題ではありません。
ただし、nanoでは、Ctrl+Shiftがarrow単語ごとの移動やテキストの選択に問題なくうまく機能します。
正確に言えば、今回は初めてArch-Linuxをインストールするので、この問題を引き起こした基本構成を忘れてしまった可能性があります。
シェルでCtrl/ Shift+をどのように検出しますか?Arrow
--必須情報を追加するには編集してください--
zle-line-init() echoti smkx
問題を解決できず、
echoti smkx; STTY='-icanon -echo min 0 time 20' od -vtc -tx1
以下を出力します。
no such terminfo capability: smkx
00000000 033 [ D
1b 5b 44
00000003
leftおよびctrl+ の場合left、
そしてechoti rmkx; STTY='-icanon -echo min 0 time 20' od -vtc -tx1
:
no such terminfo capability: rmkx
00000000 033 [ D
1b 5b 44
00000003
leftとctrl+についてleft
私はArch-linuxのデフォルト端末を使用します。正しく理解していればlinuxと呼ばれます(echo $TERM
出力では実際の端末をマスクするlinux
必要はありません)。/etc/inittabl
答え1
質問通りポーズを攻撃、これはncurses FAQに関連している可能性があります。カーソルキーが機能しない。
nanoは端末を次のように初期化します。申請方法、シェルはそうではありませんが、シェルはそうではありません。ノーマルモード。
端末(エミュレータ)を認識しませんが、「通常」モードでは、SS3(escape-O)の代わりにCSI(escape- [)を誤って使用する可能性があります。
しかし、その後のコメントでは、矛盾する情報が提供されました。動作しないと指定されたプログラム(bash、tcsh、zsh)は、関連情報を取得するためにターミナルデータベースを使用しないため、驚くべきことではありません。修飾キー。これらのいくつかはxtermマニュアル(特殊キー)。これらのどれもシェルマニュアルに文書化されていません。 「作業」が進む限り、構成ではリテラル文字列に依存します。 zshはターミナルデータベースを使用しようとしますが、拡張情報を読み取らないので - 参照源泉-運がないですね。
GUIでは、デフォルトの「ターミナル」はおそらくgnome-terminal ...TERM
に設定されていますxterm-256color
。これは(ほとんど)うまくいきますが、文書がある場合は、gnome-terminal
その欠点が適切に言及されていると予想できます。
nanoは、端末記述を使用して(関数呼び出しを呼び出す)、tigetstr
この情報を使用する方法を示します(参照)。源泉):
src/nano.c:1233:int get_keycode(const char *keyname, const int standard)
src/nano.c:2389: controlleft = get_keycode("kLFT5", CONTROL_LEFT);
src/nano.c:2390: controlright = get_keycode("kRIT5", CONTROL_RIGHT);
src/nano.c:2391: controlup = get_keycode("kUP5", CONTROL_UP);
src/nano.c:2392: controldown = get_keycode("kDN5", CONTROL_DOWN);
src/nano.c:2394: controlhome = get_keycode("kHOM5", CONTROL_HOME);
src/nano.c:2395: controlend = get_keycode("kEND5", CONTROL_END);
src/nano.c:2397: controldelete = get_keycode("kDC5", CONTROL_DELETE);
src/nano.c:2398: controlshiftdelete = get_keycode("kDC6", CONTROL_SHIFT_DELETE);
src/nano.c:2400: shiftup = get_keycode("kUP", SHIFT_UP);
src/nano.c:2401: shiftdown = get_keycode("kDN", SHIFT_DOWN);
src/nano.c:2403: shiftcontrolleft = get_keycode("kLFT6", SHIFT_CONTROL_LEFT);
src/nano.c:2404: shiftcontrolright = get_keycode("kRIT6", SHIFT_CONTROL_RIGHT);
src/nano.c:2405: shiftcontrolup = get_keycode("kUP6", SHIFT_CONTROL_UP);
src/nano.c:2406: shiftcontroldown = get_keycode("kDN6", SHIFT_CONTROL_DOWN);
src/nano.c:2408: shiftcontrolhome = get_keycode("kHOM6", SHIFT_CONTROL_HOME);
src/nano.c:2409: shiftcontrolend = get_keycode("kEND6", SHIFT_CONTROL_END);
src/nano.c:2411: altleft = get_keycode("kLFT3", ALT_LEFT);
src/nano.c:2412: altright = get_keycode("kRIT3", ALT_RIGHT);
src/nano.c:2413: altup = get_keycode("kUP3", ALT_UP);
src/nano.c:2414: altdown = get_keycode("kDN3", ALT_DOWN);
src/nano.c:2416: altpageup = get_keycode("kPRV3", ALT_PAGEUP);
src/nano.c:2417: altpagedown = get_keycode("kNXT3", ALT_PAGEDOWN);
src/nano.c:2418: altinsert = get_keycode("kIC3", ALT_INSERT);
src/nano.c:2419: altdelete = get_keycode("kDC3", ALT_DELETE);
src/nano.c:2421: shiftaltleft = get_keycode("kLFT4", SHIFT_ALT_LEFT);
src/nano.c:2422: shiftaltright = get_keycode("kRIT4", SHIFT_ALT_RIGHT);
src/nano.c:2423: shiftaltup = get_keycode("kUP4", SHIFT_ALT_UP);
src/nano.c:2424: shiftaltdown = get_keycode("kDN4", SHIFT_ALT_DOWN);
答え2
私はThomas Dickeyがコメントに与えた答えをここに書いています。私がやりたいこと(ctrl+を使うarrow)はLinuxカーネル端末では不可能です。
デスクトップ環境(KDE Plasma)をインストールしてターミナルエミュレータ(Konsole)を開くと、変更されたキーを問題なく使用できます。
みんなの助けに感謝します。