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?
emacs(e bashtambém em) você pode pular para o início / fim da linha também com Home/ Endkeys por padrão.
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?
emacs(e bashtambém em) você pode pular para o início / fim da linha também com Home/ Endkeys por padrão.
Respostas:
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:
Veja também:
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.
set -o viou echo 'set editing-mode vi' >> ~/.inputrcobter as combinações de teclas do Vim!
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.