就像跳到一行的末尾是Ctrl+ E,在哪里E可以认为是末尾,为什么要使用它跳到开始A?
emacs
(bash
以及)中使用Home
/ End
键跳转到行的开头/结尾。
就像跳到一行的末尾是Ctrl+ E,在哪里E可以认为是末尾,为什么要使用它跳到开始A?
emacs
(bash
以及)中使用Home
/ End
键跳转到行的开头/结尾。
Answers:
问题有两个方面,技术方面和历史方面。
技术上的答案是因为bash
使用GNU Readline。在readline
Control-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包含功能kh
,kH
则Homeand End将被设置为beginning-of-line
和end-of-line
。双方bash
并readline
通过开发切特·拉梅,一个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(一种隐含的模态编辑器/语言)的启发-EMACS是TECO的一组宏。参见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
回顾一下:
也可以看看:
Ctrl+ a在Emacs中跳到该行的开头,并且libreadline使用与Emacs相同的键绑定。Bash使用libreadline。
set -o vi
或echo 'set editing-mode vi' >> ~/.inputrc
来获取Vim键盘绑定!