Perché la scorciatoia Ctrl + A salta all'inizio di una linea nel terminale?


11

Come saltare alla fine di una linea è Ctrl+ E, dove si Epuò pensare come fine, perché salta all'inizio usando A?


1
Puoi pensare ad "A" per "Anfang"
Anthon, il

O "A" è la prima lettera in alpabet
Costas,

Nota che in emacs(e bashanche in) puoi saltare all'inizio / fine della riga anche con i tasti Home/ Endper impostazione predefinita.
Jimmij,

Risposte:


20

Ci sono due lati della questione, il lato tecnico e il lato storico.

La risposta tecnica è perché bashutilizza GNU Readline . In readlineControl-a è associato alla funzione beginning-of-line, puoi mostrarlo con:

$ bind -q beginning-of-line
beginning-of-line can be invoked via "\C-a", "\M-OH", "\M-[1~", "\M-[7~", "\M-[H".

dove \C-asignifica "Control-a". bind -pmostrerà tutti i binding (attenzione all'utilizzo bind, è facile rompere la tastiera se si forniscono accidentalmente opzioni o argomenti aggiuntivi).

Alcune delle associazioni di cui sopra vengono aggiunte per impostazione predefinita, altre le ho aggiunte (tramite .inputrc) per vari terminali che ho usato. Da bash-2.0, se il termcap terminale contiene le funzionalità kh, e kHquindi Homee Endsarà impostato su beginning-of-linee end-of-line. Entrambi bashe readlinesono sviluppati da Chet Ramey , un utente Emacs e anche lo sviluppatore di ceun clone Emacs.


(Si noti che questo cerca di riassumere molti anni di storia di molti decenni fa e ripercorre alcuni dettagli.)

Ora, perché è Control-a in particolare? Readline utilizza per impostazione predefinita le associazioni simili a Emacs . Control-a in GNU Emacs invoca move-beginning-of-line, quella che consideriamo ora la funzione "home".

Stallman e EMACS originali di acciaio è stato ispirato da Fred Wright E editore (un editor WYSIWYG precoce) e TECO (un criptico editor di modal / lingua) - EMACS era un insieme di macro per TECO. Vedi Essential E [PDF] (da SAIL , 1980). Tuttavia, ho usato Control-Form per "inizio riga", questo era sulla tastiera "DataDisc" che aveva un Controltasto e un Formtasto. La tastiera del cadetto spaziale dell'epoca (mancava comunque un Hometasto, sebbene avesse una End) è comunemente accusata dell'interfaccia della tastiera Emacs.

Una delle caratteristiche desiderabili di EMACS era l'uso della modalità di modifica della linea "real-time" di Control-R di TECO (TECO precede i terminali CRT / tastiera), puoi vedere le associazioni dei tasti a pagina 6 del MIT AI Lab 1978 ITS Introduzione a l'editor EMACS [PDF scansionato], dove ┌ viene utilizzato per indicare il controllo. In questa modalità, le combinazioni di tasti erano tutte sequenze di controllo, in gran parte mnemoniche: Control-E Fine di questa riga , Control-P si sposta sulla riga precedente , Control-N si sposta sulla riga successiva , Control-B all'indietro di un carattere e non ultimo Control -Un passaggio all'inizio di questa riga , il suggerimento di Costas di "prima lettera dell'alfabeto" per questo è buono come un altro.

(Un simile key binding è nel tvlibpacchetto macro che mirava a far funzionare EMACS come l'editor TVEDIT, associando il controllo A ed E alla frase indietro e avanti , ma utilizzava sequenze diverse per l'inizio e la fine della riga.)

I collegamenti Control-A / Control-E in "^ R mode" sono stati implementati direttamente in ITS TECO (1983, versione 1208, vedi l' _teco_.tgzarchivio sul sito nocrew PDP10 / ITS o su Github ), anche se non riesco a determinare in modo più accurato quando sono apparsi per la prima volta, e la fonte TECO non indica perché sono stati scelti alcuni vincoli particolari. Il documento EMACS del MIT del 1978 qui sopra implica che nel 1978 EMACS non ha usato Control-A / Control-E nativo TECO, è possibile che il scrlinpacchetto macro (riga dello schermo) abbia implementato questi.

Per ricapitolare:

  • bash usa readline
  • Le combinazioni di tasti readline seguono Emacs / EMACS
  • EMACS originale è stato creato con TECO, ereditando molte funzionalità
  • Le macro della modalità interattiva di TECO utilizzavano (principalmente) i collegamenti dei tasti di controllo mnemonici e "inizio linea" è stato assegnato a Control-A

Guarda anche:


6

Perché a Richard Stallman piace Emacs .

Ctrl+ asta saltando all'inizio della linea in Emacs e libreadline usa gli stessi collegamenti chiave di Emacs. Bash usa libreadline.


2
Nota anche che puoi fare set -o vi, o echo 'set editing-mode vi' >> ~/.inputrc, per ottenere le combinazioni di tasti di Vim!
mercoledì

Perché le persone danno questi punti di risposta? La domanda era perché ctrl + a era stato scelto come comando per andare all'inizio della riga, non quale fosse il comando.
Wurtel,

@Wurtel La risposta è nella prima frase, vedi "storia di Gnu".
Jasen,

4
Scusa, ma perché Richard Stallman ama Emacs. non mi dice perché ctrl-a mi porta all'inizio della riga. Perché non ctrl-s, o ctrl-x, o altro ?!
Wurtel,

0

La lettera "a" è stata scelta perché Control + b e Control + s erano già stati presi, quindi decisero che poiché A era la prima lettera dell'alfabeto latino che sarebbe stata quella che usavano. Come lo so? Perché oggi ho ricevuto la risposta da uno degli sviluppatori di TECO (predecessore di EMACS) ed EMACS.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.