![端末で削除は機能しますが、矢印キーは機能しないのはなぜですか? [コピー]](https://linux33.com/image/155280/%E7%AB%AF%E6%9C%AB%E3%81%A7%E5%89%8A%E9%99%A4%E3%81%AF%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E7%9F%A2%E5%8D%B0%E3%82%AD%E3%83%BC%E3%81%AF%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%AA%E3%81%84%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
Linux端末では、 "cat> file.txt"を使用して一度に1行ずつファイルを生成します。
1行あたりの削除キーは機能しますが、矢印キーは行から左右に移動するのではなく、エスケープコードを挿入することがわかりました。
なぜこれですか?基本的な端末操作に左右の矢印キーが使用できない理由はありますか?私はこれを行うことができるGNU readlineのようなものがあることを知っていますが、私の質問はそれとは何の関係もありません。
答え1
端末ドライバのライン編集機能は非常に原始的でいいえこれには、挿入点を左右に移動するなどの操作が含まれます。
彼らの仕事には以下が含まれます:
- 最後の文字を削除する(
VERASE
/erase
、BackSpace) - 最後の単語を削除(
VWERASE
/werase
、Control-W) - 全行を削除(
VKILL
/kill
、Control-U)
さらに、複数のキーシーケンス(通常は左右の矢印キーに送信されるエスケープ文字)を特別なタスクにバインドすることはできません。
もちろん、UnicodeVERASE
はVWERASE
サポートしていません。 Linuxには形式的なIUTF8
フラグ(単純なデータに対して動作するので何もないよりも優れています)がありますが、幅が0の修飾子、方向フラグなどについてはわかりません。
詳細については、stty(1)
およびマンページを参照してください。termios(3)