为什么 GNU Info (info-stdn) 对同一个命令有如此多的键序列?例如:
C-f (forward-char) Move forward a character
ESC O C (forward-char) Move forward a character
ESC [ C (forward-char) Move forward a character
ESC ESC O B .. ESC ESC O C (forward-word) Move forward a word
ESC ESC [ B (forward-word) Move forward a word
ESC f (forward-word) Move forward a word
SPC Scroll forward a page
C-v (scroll-forward) Scroll forward in this window
ESC [ 6 ~ (scroll-forward) Scroll forward in this window
这是我的 GNU Info 版本:
[root@localhost ~]# info --version
info (GNU texinfo) 4.0
Copyright (C) 1999 Free Software Foundation, Inc.
There is NO warranty. You may redistribute this software
under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.
[root@localhost ~]#
答案1
每个操作都有来自两个世界的快捷方式 - “PC 风格”的快捷方式和“Emacs 风格”的快捷方式。
例如C-f
CtrlF,Emacs 键用于向前移动光标;类似地,ESC f
实际上是一种不同的写法M-f
AltF,可能是 Emacs-ese 用于跳转到下一个单词。
(你还会在 Bash 中找到许多这样的快捷键,它们被分组在“emacs-mode”下。它们在 Emacs 在“现代”PC 键盘上的使用时间要早得多,这些键盘有箭头键和 PgUp/PgDn 键,类似于 Vi/Vim 有hjkl
导航功能的原因——尽管如此,它仍然保留了导航功能。还支持现代箭头键。
同时,ESC [ C
不是多键序列——它代表一键,特别是→“右箭头”光标键,当您在终端仿真器中ESC [ 6 ~
按下时发送。Page Down
由于终端仿真器之间的不一致,每个都有两个 - 带有 的变体ESC O
也是箭头键,但采用特定于 Rxvt 终端的格式,而 则被ESC [
大多数其他终端仿真器使用(Xterm 样式)。因此,这两个条目实际上是相同的面向用户的按键,但传输方式不同。
(除此之外,还有更多的不一致之处;序列ESC [ B
本身的意思是←“左箭头”;你在特定示例中加上前面的附加项ESC
会将其变成Alt←。这又有所不同——在 Xterm 的“修饰符”格式中,Alt→将是ESC [ 1 ; 3 C
,因此 GNU Info 需要识别这两个序列才能处理同一个按键。)
行动 | Emacs 风格 | PC 风格(在 Xterm 中) | PC 风格(在 Rxvt 中) |
---|---|---|---|
向前移动一个字符 | C-f CtrlF |
ESC [ C →(右箭头) |
ESC O C → |
向前移动一个单词 | M-f AltF |
ESC [ 1 ; 3 C 1 Alt→ |
ESC ESC [ C Alt→ |
向前滚动一页 | C-v CtrlV |
ESC [ 6 ~ Page Down |
ESC [ 6 ~ Page Down |
1(这不在您的列表中,可能是因为您的列表并不完全是“Xterm 与 Rxvt”,而可能是“某个 30 年前的终端与某个其他 30 年前的终端”。不过,它确实证明了对于基于终端的应用程序,相同的物理按键需要以两种不同的方式处理。)
最后,为了方便而Space模仿Page Down,就像许多其他面向阅读的应用程序(包括现代网络浏览器)一样。