回答:
質問には、技術面と歴史面の2つの側面があります。
技術的な答えは、GNU Readlineをbash
使用しているためです。ではコントロール機能にバインドされ、あなたがこれを表示することができます。readline
beginning-of-line
$ bind -q beginning-of-line
beginning-of-line can be invoked via "\C-a", "\M-OH", "\M-[1~", "\M-[7~", "\M-[H".
ここ\C-a
で「Control-a」を意味します。
bind -p
すべてのバインディングが表示されます(を注意して使用bind
してください。誤って追加のオプションや引数を指定すると、キーボードが壊れやすくなります)。
上記のバインディングの一部はデフォルトで追加されますが、.inputrc
使用したさまざまな端末に(を介して)追加したバインディングもあります。bashの-2.0ので、端末のtermcapの機能が含まれている場合kh
、およびkH
その後HomeとEndに設定されるbeginning-of-line
とend-of-line
。bash
とreadline
は両方とも、Emacsユーザーであり、Emacsクローンの開発者でもあるChet Rameyによって開発されましたce
。
(注意してください、これは何十年も前からの長年の歴史を要約しようとするものであり、いくつかの詳細については光沢がありません。)
では、なぜControl-aなのか。Readline はデフォルトでEmacsのようなバインディングを使用します。GNU EmacsのControl-aはを呼び出しますmove-beginning-of-line
。これは、現在「ホーム」関数と見なされているものです。
Stallman and SteelのオリジナルのEMACSは、Fred WrightのEエディター(初期のWYSIWYGエディター)とTECO(不可解なモーダルエディター/言語)に触発されたものです。EMACSはTECO のマクロセットでした。Essential E [PDF](SAIL、1980 から)を参照してください。しかし、Eは "行頭"にControl-Formを使用しました。これは、Controlキーとキーを持つ "DataDisc"キーボード上にありましたForm。当時のスペースカデットキーボード(HomeちなみにキーがありませんでしたがEnd)は、Emacsキーボードインターフェイスが原因であると一般的に非難されています。
EMACSの望ましい機能の1つは、TECOのControl-R「リアルタイム」ライン編集モード(TECOはCRT /キーボード端末よりも古い)の使用でした。MITAIラボ1978 ITSの紹介の 6ページにあるキーバインディングを確認できます。EMACSエディター [スキャンされたPDF]。ここで、Controlはコントロールを示すために使用されます。このモードでは、キーバインディングはすべて制御シーケンスであり、主にニーモニックでした。Control-E この行の終わり、Control-P は前の行に移動、Control-N は次の行に移動、Control-Bは1文字後方、そして少なくともControl - この行の最初に移動します。これについての「アルファベットの最初の文字」のコスタスの提案は、どれほど優れています。
(同様のキーバインディングがtvlib
マクロパッケージにあり、EMACSをTVEDITエディターのように動作させることを目的としており、コントロールAおよびEを後方および前方のセンテンスにバインドしますが、行の先頭と末尾に異なるシーケンスを使用します。)
「^ Rモード」のControl-A / Control-Eバインディングは、ITS TECO(1983、バージョン1208、nocrew PDP10 / ITSサイトの_teco_.tgz
アーカイブ、またはGithubにあるアーカイブを参照)に直接実装されましたが、正確には判断できませんそれらが最初に表示されたとき、およびTECOソースは、特定のバインディングが選択された理由を示していません。上記の1978年のMIT EMACSドキュメントは、1978年にEMACSがTECOネイティブControl-A / Control-Eを使用しなかったことを意味し、マクロパッケージ(画面行)がこれらを実装した可能性があります。scrlin
要点をまとめると:
こちらもご覧ください:
ので、リチャード・ストールマンが好きなのEmacsを。
Ctrl+ aはEmacsの行頭にジャンプし、libreadlineはEmacsと同じキー割り当てを使用します。Bashはlibreadlineを使用します。
set -o vi
、またはを実行できることにも注意してくださいecho 'set editing-mode vi' >> ~/.inputrc
!