开玩笑地说,我经常把 Unix 描述为“这个操作系统是为喜欢敲键盘的人们服务的。”当然,Unix 甚至还有一个命令行,这个事实是个确凿的证据,证明了我所说的话。但是命令行用户不喜欢敲入那么多字。那又为什么如此多的命令会有这样简短的命令名,像 cp,ls,mv,和 rm?
事实上,命令行最为珍视的目标之一就是懒惰;用最少的击键次数来完成最多的工作。另一个目标是你的手指永远不必离开键盘,永不触摸鼠标。
在这一节我们将看一下 Bash Shell 的特性,这些特性使键盘使用起来更加迅速,更加高效。
Bash Shell 使用了一个名为 Readline 的库(共享的线程集合,可以被不同的程序使用),来实现命令行编辑。我们已经看到一些例子。我们知道,例如,箭头按键可以移动鼠标,此外还有许多特性。想想这些额外的工具,我们可以在工作中使用。学会所有的特性并不重要,但许多特性非常有帮助。选择自己需要的特性。
注意:下面一些按键组合(尤其使用 Alt 键的组合),可能会被 GUI 拦截来触发其它的功能。当使用虚拟控制台时,所有的按键组合都应该正确地工作。
下表列出了移动光标所使用的按键。
按键 | 作用 |
---|---|
Ctrl+a | 移动光标到行首。 |
Ctrl+e | 移动光标到行尾。 |
Ctrl+f | 光标前移一个字符;和右箭头作用一样。 |
Ctrl+b | 光标后移一个字符;和左箭头作用一样。 |
Alt+f | 光标前移一个字。 |
Alt+b | 光标后移一个字。 |
Ctrl+l | 清空屏幕,移动光标到左上角。clear 命令完成同样的工作。 |
下面这些快捷键用来在命令行中编辑字符。
按键 | 作用 |
---|---|
Ctrl+d | 删除光标位置的字符。 |
Ctrl+t | 光标位置的字符和光标前面的字符互换位置。 |
Alt+t | 光标位置的字和其前面的字互换位置。 |
Alt+l | 把从光标位置到字尾的字符转换成小写字母。 |
Alt+u | 把从光标位置到字尾的字符转换成大写字母。 |
Readline 的文档使用术语 killing 和 yanking 来指我们平常所说的剪切和粘贴。剪切下来的本文被存储在一个叫做剪切环(kill-ring)的缓冲区中。
按键 | 作用 |
---|---|
Ctrl+k | 剪切从光标位置到行尾的文本。 |
Ctrl+u | 剪切从光标位置到行首的文本。 |
Alt+d | 剪切从光标位置到词尾的文本。 |
Alt+Backspace | 剪切从光标位置到词头的文本。如果光标在一个单词的开头,剪切前一个单词。 |
Ctrl+y | 把剪切环中的文本粘贴到光标位置。 |
如果你冒险进入到 Readline 的文档中,你会在 bash 手册页的 READLINE 段落,遇到一个术语“元键(meta key)”。在当今的键盘上,这个元键是指 Alt 键,但并不总是这样。
回到昏暗的年代(在PC 之前Unix 之后),并不是每个人都有他们自己的计算机。他们可能有一个叫做终端的设备。一个终端是一种通信设备,它以一个文本显示屏幕和一个键盘作为其特色,它里面有足够的电子器件来显示文本字符和移动光标。它连接到(通常通过串行电缆)一个更大的计算机或者是一个大型计算机的通信网络。
有许多不同的终端产品商标,它们有着不同的键盘和特征显示集。因为它们都倾向于至少能理解 ASCII,所以软件开发者想要符合最低标准的可移植的应用程序。Unix 系统有一个非常精巧的方法来处理各种终端产品和它们不同的显示特征。
因为 Readline 程序的开发者们,不能确定一个专用多余的控制键的存在,他们发明了一个控制键,并把它做“元(meta)”。然而在现代的键盘上,Alt 键作为元键来服务。如果你仍然在使用终端(在 Linux 中,你仍然可以得到一个终端),你也可以按下和释放 Esc 键来得到如控制 Alt 键一样的效果。