就像跳转到行尾是Ctrl+ E,其中E可以认为是结束,为什么它使用 跳转到开头A?
答案1
这个问题有两个方面,技术方面和历史方面。
技术答案是因为bash
使用GNU 阅读线。在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
和Home将End被设置为beginning-of-line
和end-of-line
。和bash
都是readline
由切特·雷米,一名 Emacs 用户,也是ce
Emacs 克隆版的开发者。
(请注意,本文试图总结几十年前的多年历史,并掩盖一些细节。)
现在,为什么特别是 Control-a?阅读线默认使用类似 Emacs 的绑定。 GNU Emacs 中的 Control-a 调用move-beginning-of-line
,我们现在认为它是“home”函数。
Stallman and Steel 最初的 EMACS受到弗雷德·赖特 (Fred Wright) 的启发乙编辑(早期的所见即所得编辑器)和东元(一种神秘的模态编辑器/语言)——EMACS 是一种宏集对于东元来说。看必需E[PDF](来自帆,1980)。然而,E 使用 Control-Form 来表示“行的开头”,这是在“DataDisc”键盘上,该键盘有一个Control键和一个Form键。这太空学员键盘的时间(Home顺便说一句,缺少钥匙,尽管它有一个End)被普遍指责用于 Emacs 键盘界面。
EMACS 的理想功能之一是它使用 TECO 的 Control-R“实时”行编辑模式(TECO 早于 CRT/键盘终端),您可以在 MIT AI Lab 1978 ITS 第 6 页上看到按键绑定EMACS 编辑器简介[扫描的 PDF],其中 ┌ 用于表示控制。在这种模式下,按键绑定都是控制序列,主要是助记符:Control-E此行结束, 控制-P移至上一行, 控制-N移至下一行, 控制-B向后一个字符,尤其是 Control-A移至该行的开头科斯塔斯为此提出的“字母表的第一个字母”的建议是最好的。
(类似的键绑定位于tvlib
宏包其目的是使 EMACS 的行为类似于 TVEDIT 编辑器,将控件 A 和 E 绑定到后退和前进句子,但对行的开头和结尾使用了不同的序列。)
“^R 模式”中的 Control-A/Control-E 绑定直接在 ITS TECO 中实现(1983 年,版本 1208,请参阅_teco_.tgz
位于nocrew PDP10/ITS网站,或在吉图布),尽管我无法更准确地确定它们第一次出现的时间,并且 TECO 来源也没有说明为什么选择任何特定的绑定。上面的 1978 MIT EMACS 文件暗示 1978 年 EMACS 并没有使用 TECO 原生 Control-A/Control-E,它是可能的认为scrlin
宏包(屏幕线)实现了这些。
回顾一下:
- bash 使用 readline
- readline 键绑定遵循 Emacs/EMACS
- 原版EMACS与东元共同打造,继承了许多特性
- TECO 的交互模式宏(大部分)使用助记符控制键绑定,“行首”最终分配给 Control-A
也可以看看:
答案2
答案3
选择字母“a”是因为 Control+b 和 Control+s 已经被采用,所以他们决定因为 A 是拉丁字母表的第一个字母,所以他们将使用它。我怎么知道?因为我今天从东元(EMACS的前身)和EMACS的开发者之一那里得到了答案。