为什么快捷键Ctrl + A跳至终端中的行首?


11

就像跳到一行的末尾是Ctrl+ E,在哪里E可以认为是末尾,为什么要使用它跳到开始A


1
您可以想到“ A”代表“ Anfang”
Anthon

或“ A”是字母表中的第一个字母
Costas

请注意,在默认情况下,您还可以在emacsbash以及)中使用Home/ End键跳转到行的开头/结尾。
jimmij 2015年

Answers:


20

问题有两个方面,技术方面和历史方面。

技术上的答案是因为bash使用GNU Readline。在readlineControl-a绑定到函数中beginning-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包含功能khkHHomeand End将被设置为beginning-of-lineend-of-line。双方bashreadline通过开发切特·拉梅,一个Emacs用户还开发商ce的Emacs的克隆。


(请注意,此工作旨在总结几十年前的多年历史,并掩盖一些细节。)

现在,为什么它特别是Control-a?Readline 默认使用类似Emacs的绑定。GNU Emacs中的Control-a调用move-beginning-of-line,我们现在将其视为“ home”函数。

Stallman and Steel的原始EMACS受到Fred Wright的E编辑器(早期的WYSIWYG编辑器)和TECO(一种隐含的模态编辑器/语言)的启发-EMACSTECO的组宏。参见Essential E [PDF](摘自SAIL,1980年)。但是,E使用Control-Form来“开始行”,这是在“ DataDisc”键盘上的,它具有一个Control键和一个Form键。Emacs键盘界面通常归咎于当时的太空学员键盘Home尽管有一个键,但缺少一个键End)。

一个EMACS的可取之处是它的使用TECO的控制-R的“实时”在线编辑模式(TECO早CRT /键盘终端),你可以看到MIT人工智能实验室1978年第6页的键绑定介绍EMACS编辑器 [扫描的PDF],其中┌表示控制。在此模式下,键绑定全部是控制序列,主要是助记符:Control-E 此行的结尾,Control-P 移至上一行,Control-N 移至下一行,Control-B 后退一个字符,并且至少是Control - 移至此行的开头,Costas 为此提出的“字母表中的第一个字母”的建议与其他建议一样好。

tvlib宏程序包中有一个类似的键绑定,旨在使EMACS像TVEDIT编辑器一样工作,将控件A和E绑定到后退和前进语句,但对行的开头和结尾使用不同的顺序。)

尽管无法准确地确定“ ^ R模式”中的Control-A / Control-E绑定,但直接在ITS TECO(1983,版本1208,请参见nocrew PDP10 / ITS站点或Github上的_teco_.tgz档案)中实现。当它们首次出现时,并且TECO来源没有指出为什么选择任何特定的绑定。上述1978年麻省理工学院EMACS文件意味着,在1978年EMACS没有使用TECO本地控制-A /控制-E,它是可能的是,宏包(屏线)实现了这些。scrlin

回顾一下:

  • bash使用readline
  • readline键绑定遵循Emacs / EMACS
  • 原始的EMACS由TECO创建,继承了许多功能
  • TECO的交互模式宏(主要)用于助记符控制键绑定,并且“行首”最终分配给了Control-A

也可以看看:


6

因为Richard Stallman喜欢Emacs

Ctrl+ a在Emacs中跳到该行的开头,并且libreadline使用与Emacs相同的键绑定。Bash使用libreadline。


2
另请注意,您可以执行set -o viecho 'set editing-mode vi' >> ~/.inputrc来获取Vim键盘绑定!
wchargin 2015年

人们为什么给这个答案?问题是,为什么选择ctrl + a作为转到行首的命令,而不是命令是什么。
Wurtel

@Wurtel答案在第一句话中,请参阅“ Gnu的历史”。
Jasen 2015年

4
抱歉,但是因为Richard Stallman喜欢Emacs。没有告诉我为什么ctrl-a将我带到行首。为什么不按ctrl-s或ctrl-x或其他?
Wurtel

0

之所以选择字母“ a”,是因为已经使用了Control + b和Control + s,因此他们决定,由于A是拉丁字母的第一个字母,因此将使用它们。我怎么知道?因为我今天从TECO(EMACS的前身)和EMACS的开发人员之一那里得到了答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.