ショートカットCtrl + Aがターミナルの行の先頭にジャンプするのはなぜですか?


11

行の終わりにジャンプするのはCtrl+ EであるEように、終わりと考えることができるのに、なぜそれを使用して最初にジャンプするのAですか?


1
「Anfang」の「A」を考えることができます
Anthon

または「A」はアルパベットの最初の文字です
Costas

してください。なお、その中にemacs(とでbashもよう)あなたもと行の先頭/末尾にジャンプすることができますHome/ Endデフォルトではキー。
jimmij

回答:


19

質問には、技術面と歴史面の2つの側面があります。

技術的な答えは、GNU Readlineをbash使用しているためです。ではコントロール機能にバインドされ、あなたがこれを表示することができます。readlinebeginning-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その後HomeEndに設定されるbeginning-of-lineend-of-linebashreadlineは両方とも、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(不可解なモーダルエディター/言語)に触発されたものです。EMACSTECO のマクロセットでした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

要点をまとめると:

  • bashはreadlineを使用します
  • readlineのキー割り当てはEmacs / EMACSに従います
  • オリジナルのEMACSはTECOで作成され、多くの機能を継承しています
  • TECOのインタラクティブモードマクロは、(主に)ニーモニックコントロールキーバインディングを使用し、「行の先頭」がControl-Aに割り当てられた

こちらもご覧ください:


6

ので、リチャード・ストールマンが好きなのEmacsを

Ctrl+ aはEmacsの行頭にジャンプし、libreadlineはEmacsと同じキー割り当てを使用します。Bashはlibreadlineを使用します。


2
また、Vimキーバインドを取得するためにset -o vi、またはを実行できることにも注意してくださいecho 'set editing-mode vi' >> ~/.inputrc
wchargin

なぜ人々はこの回答ポイントを与えているのですか?問題は、コマンドではなく、行の先頭に移動するコマンドとしてctrl + aが選択された理由です。
wurtel '19年

@Wurtel答えは最初の文にあります、「Gnuの歴史」を参照してください。
Jasen

3
申し訳ありませんが、Richard StallmanはEmacsが好きです。ctrl-aで行の先頭に移動する理由がわかりません。どうしてctrl-sやctrl-xなどなんて!?
wurtel '19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.