Al igual que saltar al final de una línea es Ctrl+ E, ¿dónde Ese puede pensar como final? ¿Por qué salta al principio A?
bash
keyboard-shortcuts
xi.lin
fuente
fuente
emacs
(ybash
también en) puede saltar al principio / final de la línea también con las teclasHome
/End
por defecto.Respuestas:
Hay dos lados en la pregunta, el lado técnico y el lado histórico.
La respuesta técnica es porque
bash
usa GNU Readline . Enreadline
Control-a está vinculado a la funciónbeginning-of-line
, puede mostrar esto con:donde
\C-a
significa "Control-a".bind -p
mostrará todos los enlaces (tenga cuidado al usarlosbind
, es fácil romper su teclado si accidentalmente proporciona opciones o argumentos adicionales).Algunos de los enlaces anteriores se agregan de forma predeterminada, otros los he agregado (vía
.inputrc
) para varios terminales que he usado. Desde bash-2.0, si el terminal termcap contiene las capacidadeskh
, ykH
luego Homey Endse establecerá enbeginning-of-line
yend-of-line
. Ambosbash
yreadline
están desarrollados por Chet Ramey , un usuario de Emacs y también el desarrollador dece
un clon de Emacs.(Tenga en cuenta que esto se esfuerza por resumir muchos años de historia de hace muchas décadas, y pasa por alto algunos detalles).
Ahora, ¿por qué es Control-a en particular? Readline utiliza por defecto enlaces tipo Emacs . Control-a en GNU Emacs invoca
move-beginning-of-line
, lo que consideramos como la función "home" ahora.El EMACS original de Stallman and Steel se inspiró en el editor E de Fred Wright (uno de los primeros editores WYSIWYG) y TECO (un editor / lenguaje críptico modal): EMACS era un conjunto de macros para TECO. Ver Essential E [PDF] (de SAIL , 1980). Sin embargo, E usó Control-Form para "inicio de línea", esto estaba en el teclado "DataDisc" que tenía una Controltecla y una Formtecla. El teclado de cadetes espaciales de la época (que por cierto carece de una Hometecla, aunque tenía una End) se atribuye comúnmente a la interfaz del teclado Emacs.
Una de las características deseables de EMACS fue su uso del modo de edición de línea "en tiempo real" Control-R de TECO (TECO es anterior a los terminales CRT / teclado), puede ver las asociaciones de teclas en la página 6 del MIT AI Lab 1978 ITS Introducción a el editor EMACS [PDF escaneado], donde ┌ se usa para denotar Control. En este modo, las combinaciones de teclas eran todas secuencias de control, en gran parte mnemotécnicas: Control-E Fin de esta línea , Control-P moverse a la línea anterior , Control-N moverse a la siguiente línea , Control-B hacia atrás un personaje , y no menos importante Control -Un paso al comienzo de esta línea , la sugerencia de Costas de "primera letra del alfabeto" para esto es tan buena como cualquiera.
(Una combinación de teclas similar se encuentra en el
tvlib
paquete de macros que tiene como objetivo hacer que EMACS se comporte como el editor TVEDIT, vinculando el control A y E a la oración hacia adelante y hacia atrás , pero usó diferentes secuencias para el comienzo y el final de la línea).Los enlaces Control-A / Control-E en "modo ^ R" se implementaron directamente en el ITS TECO (1983, versión 1208, ver el
_teco_.tgz
archivo en el sitio nocrew PDP10 / ITS , o en Github ), aunque no puedo determinar con mayor precisión cuando aparecieron por primera vez, y la fuente TECO no indica por qué se eligieron enlaces específicos. El documento MIT EMACS de 1978 anterior implica que en 1978 EMACS no utilizó TECO Control-A / Control-E nativo, es posible que elscrlin
paquete macro (línea de pantalla) los haya implementado.Recordar:
Ver también:
fuente
Porque a Richard Stallman le gusta Emacs .
Ctrl+ aestá saltando al comienzo de la línea en Emacs, y libreadline usa las mismas combinaciones de teclas que Emacs. Bash usa libreadline.
fuente
set -o vi
oecho 'set editing-mode vi' >> ~/.inputrc
obtener combinaciones de teclas de Vim!Se eligió la letra "a" porque Control + b y Control + s ya se tomaron, por lo que decidieron que, dado que A era la primera letra del alfabeto latino, sería lo que usarían. ¿Cómo puedo saber? Porque hoy recibí la respuesta de uno de los desarrolladores de TECO (predecesor de EMACS) y EMACS.
fuente