Por que o atalho Ctrl + A está saltando para o início de uma linha no terminal?

11

Como pular para o final de uma linha é Ctrl+ E, onde Epode ser considerado o fim, por que pula para o início do uso A?

xi.lin
fonte
1
Você pode pensar em "A" para "Anfang"
Anthon
Ou "A" é a primeira letra em alpabet
Costas
Observe que em emacs(e bashtambém em) você pode pular para o início / fim da linha também com Home/ Endkeys por padrão.
jimmij

Respostas:

20

Existem dois lados da questão, o lado técnico e o lado histórico.

A resposta técnica é porque bashusa o GNU Readline . No readlineControl-a está vinculado à função beginning-of-line, você pode mostrar isso com:

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

onde \C-asignifica "Control-a". bind -pmostrará todas as ligações (tenha cuidado ao usar bind, é fácil quebrar o teclado se você acidentalmente fornecer opções ou argumentos adicionais).

Algumas das ligações acima são adicionadas por padrão, outras adicionei (via .inputrc) para vários terminais que usei. Desde o bash-2.0, se o termcap do terminal contiver os recursos kh, e kHentão Homee Endserá definido como beginning-of-linee end-of-line. Ambos bashe readlinesão desenvolvidos por Chet Ramey , um usuário do Emacs e também o desenvolvedor de ceum clone Emacs.


(Observe que isso se esforça para resumir muitos anos de história de muitas décadas atrás e encobrir alguns detalhes.)

Agora, por que é Control-a em particular? O Readline usa, por padrão, ligações do tipo Emacs . Control-a no GNU Emacs chama move-beginning-of-line, o que consideramos ser a função "home" agora.

O EMACS original de Stallman and Steel foi inspirado no editor E de Fred Wright (um dos primeiros editores do WYSIWYG) e no TECO (um editor / linguagem modal enigmática) - o EMACS era um conjunto de macros para o TECO. Veja E essencial [PDF] (de SAIL , 1980). E, no entanto, usou o Control-Form para "início de linha", que estava no teclado "DataDisc", que tinha uma Controltecla e uma Formtecla. O teclado de cadete espacial da época (sem uma Hometecla, apesar de ter uma End) é comumente responsabilizado pela interface do teclado do Emacs.

Uma das características desejáveis ​​do EMACS foi o uso do modo de edição de linha Control-R "em tempo real" do TECO (o TECO é anterior aos terminais CRT / teclado). Você pode ver as combinações de teclas na página 6 do MIT AI Lab 1978 ITS Introduction to o editor EMACS [PDF digitalizado], em que ┌ é usado para denotar Control. Nesse modo, as combinações de teclas eram todas seqüências de controle, amplamente mnemônicas: Control-E Fim dessa linha , Control-P move para a linha anterior , Control-N move para a linha anterior , Control-N move para a próxima linha , Control-B retrocede um caractere e, pelo menos, Control -Um passo para o início desta linha , a sugestão de Costas de "primeira letra do alfabeto" para isso é tão boa quanto qualquer outra.

(Uma ligação de chave semelhante está no tvlibpacote de macro que visa fazer o EMACS se comportar como o editor TVEDIT, vinculando os controles A e E à frase anterior e posterior , mas utilizou sequências diferentes para o início e o fim da linha.)

As ligações Control-A / Control-E no "^ modo R" foram implementadas diretamente no ITS TECO (1983, versão 1208, consulte o _teco_.tgzarquivo no site do nocrew PDP10 / ITS ou no Github ), embora não seja possível determinar com mais precisão quando eles apareceram pela primeira vez, e a fonte do TECO não indica por que foram escolhidas quaisquer ligações em particular. O documento de 1978 do MIT EMACS acima implica que, em 1978, o EMACS não usou o Control-A / Control-E nativo do TECO, é possível que o scrlinpacote macro (linha de tela) os tenha implementado.

Para recapitular:

  • bash usa readline
  • as ligações de teclas readline seguem o Emacs / EMACS
  • o EMACS original foi criado com o TECO, herdando muitos recursos
  • As macros de modo interativo do TECO usavam (principalmente) ligações de teclas de controle mnemônicas e o "início de linha" acabou atribuído ao Control-A

Veja também:

mr.spuratic
fonte
6

Porque Richard Stallman gosta de Emacs .

Ctrl+ aestá pulando para o início da linha no Emacs, e o libreadline usa as mesmas combinações de teclas do Emacs. O Bash usa libreadline.

Jasen
fonte
2
Observe também que você pode fazer set -o viou echo 'set editing-mode vi' >> ~/.inputrcobter as combinações de teclas do Vim!
wchargin
Por que as pessoas estão dando pontos de resposta? A questão era por que ctrl + a foi escolhido como o comando para ir para o início da linha, não qual é o comando.
wurtel
@ Wurtel A resposta está na primeira frase, veja "história do Gnu".
Jasen
4
Desculpe, mas porque Richard Stallman gosta do Emacs. não me diz por que ctrl-a me leva ao início da linha. Por que não ctrl-s, ou ctrl-x, ou qualquer outra coisa ?!
wurtel
0

A letra "a" foi escolhida porque Control + be Control + s já foram escritos, então eles decidiram que, como A era a primeira letra do alfabeto latino, seria o que eles usavam. Como eu sei? Porque recebi a resposta hoje de um dos desenvolvedores do TECO (antecessor do EMACS) e do EMACS.

PrayingSavesVidas
fonte