键盘高级操作技巧

我们将用到一下命令:

  • clear - 清空屏幕

  • history - 显示历史列表内容

Bash 使用了一个名为 Readline 的库(共享的例程集合,可以被不同的程序使用),来实现命令行编辑。我们已经看到一些例子。我们知道,例如,箭头按键可以移动光标,此外还有许多特性。想想这些额外的工具,我们可以在工作中使用。学会所有的特性并不重要,但许多特性非常有帮助。选择自己需要的特性。


注意:

9.1.1 移动光标

下表列出了移动光标所使用的按键:

9.1.2 修改文本

下表列出了在命令行中编辑字符使用的按键。

9.1.3 剪切和粘贴文本

Readline 的文档使用术语 killing 和 yanking 来指我们平常所说的剪切和粘贴。剪切下来的本文被存储在一个叫做剪切环(kill-ring)的缓冲区中。

shell 能帮助你的另一种方式是通过一种叫做自动补全的机制。当你敲入一个命令时,按下 tab 键,自动补全就会发生。让我们看一下这是怎样工作的。给出一个看起来像这样的家目录:

试着输入下面的命令,但不要按下 Enter 键:

现在按下 tab 键:

  1. [me@linuxbox ~]$ ls ls-output.txt
  1. [me@linuxbox ~]$ ls D

按下 tab:

    没有补全,只是嘟嘟响。因为”D”不止匹配目录中的一个条目。为了自动补全执行成功,你给它的”线索”不能模棱两可。如果我们继续输入:

    然后按下 tab:

    自动补全成功了。

    这个实例展示了路径名自动补全,这是最常用的形式。自动补全也能对变量(如果字的开头是一个”$”)、用户名字(单词以”~”开始)、命令(如果单词是一行的第一个单词)和主机名(如果单词的开头是”@”)起作用。主机名自动补全只对包含在文件/etc/hosts 中的主机名有效。

    有一系列的控制和元键序列与自动补全相关联:

    |按键|作用|
    |Alt-?|显示可能的自动补全列表。在大多数系统中,你也可以完成这个通过按两次 tab 键,这会更容易些。|
    |Alt-*|插入所有可能的自动补全。当你想要使用多个可能的匹配项时,这个很有帮助。|

    正如我们在第二章中讨论到的,bash 维护着一个已经执行过的命令的历史列表。这个命令列表被保存在你家目录下,一个叫做 .bash_history 的文件里。这个 history 工具是个有用资源,因为它可以减少你敲键盘的次数,尤其当和命令行编辑联系起来时。

    9.3.1 搜索历史命令

    在任何时候,我们都可以浏览历史列表的内容,通过:

    1. [me@linuxbox ~]$ history | less
    1. [me@linuxbox ~]$ history | grep /usr/bin

    比方说在我们的搜索结果之中,我们得到一行,包含了有趣的命令,像这样;

    1. 88 ls -l /usr/bin > ls-output.txt

    数字 “88” 是这个命令在历史列表中的行号。我们可以使用另一种叫做历史命令展开的方式,来调用“88”所代表的这一行命令:

    bash 会把 “!88” 展开成为历史列表中88行的内容。还有其它的历史命令展开形式,我们一会儿讨论它们。bash 也具有按递增顺序来搜索历史列表的能力。这意味着随着字符的输入,我们可以告诉 bash 去搜索历史列表,每一个附加字符都进一步提炼我们的搜索。启动递增搜索,输入 Ctrl-r,其后输入你要寻找的文本。当你找到它以后,你可以敲入 Enter 来执行命令,或者输入 Ctrl-j,从历史列表中复制这一行到当前命令行。再次输入 Ctrl-r,来找到下一个匹配项(向上移动历史列表)。输入 Ctrl-g 或者 Ctrl-c,退出搜索。实际来体验一下:

    首先输入 Ctrl-r:

    1. (reverse-i-search)`':

    提示符改变,显示我们正在执行反向递增搜索。搜索过程是”反向的”,因为我们按照从”现在”到过去某个时间段的顺序来搜寻。下一步,我们开始输入要查找的文本。在这个例子里是 “/usr/bin”:

    1. (reverse-i-search)`/usr/bin': ls -l /usr/bin > ls-output.txt

    即刻,搜索返回我们需要的结果。我们可以按下 Enter 键来执行这个命令,或者我们可以按下Ctrl-j复制这个命令到我们当前的命令行,来进一步编辑它。好了现在我们复制它,输入 Ctrl-j:

    1. [me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt

    我们的 shell 提示符重新出现,命令行加载完毕,准备接受下一命令!下表列出了一些按键组合,这些按键可以用来操作历史列表:

    9.3.2 历史命令展开

    通过使用 “!” 字符,shell 为历史列表中的命令,提供了一个特殊的展开类型。我们已经知道一个感叹号,其后再加上一个数字,可以把来自历史列表中的命令插入到命令行中。这里还有一些其它的展开特性:

    应该小心谨慎地使用 “!string” 和 “!?string” 格式,除非你完全确信历史列表条目的内容。

    在历史展开机制中,还有许多可利用的特点,但是这个题目已经太晦涩难懂了,如果我们再继续讨论的话,我们的头可能要爆炸了。bash 手册页的 HISTORY EXPANSION 部分详尽地讲述了所有要素。

    在这一章中,我们已经讨论了一些由 shell 提供的键盘操作技巧,这些技巧是来帮助打字员减少工作量的。随着时光流逝,你和命令行打交道越来越多,我猜想你会重新翻阅这一章的内容,学会更多的技巧。目前,你就认为它们是可选的,潜在地有帮助的。