1.移动光标
下面列出了移动光标所使用的按键:
按键 行动
Ctrl-a 移动光标到行首。
Ctrl-e 移动光标到行尾。
Ctrl-f 光标前移一个字符;和右箭头作用一样。
Ctrl-b 光标后移一个字符;和左箭头作用一样。
Alt-f 光标前移一个字。
Alt-b 光标后移一个字。
Ctrl-l 清空屏幕,移动光标到左上角。clear 命令完成同样的工作。
2. 修改文本
按键 行动
Ctrl-d 删除光标位置的字符。
Ctrl-t 光标位置的字符和光标前面的字符互换位置。
Alt-t 光标位置的字和其前面的字互换位置。
Alt-l 把从光标位置到字尾的字符转换成小写字母。
Alt-u 把从光标位置到字尾的字符转换成大写字母。
3. 剪切和粘贴文本
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 键一样的效果。
4. 自动补全
有一种方式是通过一种叫做自动补全的机制。当敲入一个命令时,按下 tab 键,自动补全就会发生。给出一个看起来像这样的家目录:
$ ls
Desktop ls-output.txt Pictures Templates Videos
....
试着输入下面的命令,但不要按下 Enter 键:
$ ls l
#现在按下 tab 键:
$ ls ls-output.txt
看一下 shell 是怎样补全这一行的?再试试另一个例子。也不要按下 Enter:
$ ls D
#按下 tab:
$ ls D
没有补全,因为 “D” 不止匹配目录中的一个条目。为了自动补全执行成功,给它的 “线索” 不能模棱两可。如果继续输入:
$ ls Do
#然后按下 tab:
$ ls Documents
自动补全成功了。
这个实例展示了路径名自动补全,这是最常用的形式。自动补全也能对变量(如果字的开头是一个 “$”)、用户名字(单词以”∼” 开始)、命令(如果单词是一行的第一个单词)和主机名(如果单词的开头是 “@”)起作用。主机名自动补全只对包含在文件/etc/hosts 中的主机名有效。
有一系列的控制和元键序列与自动补全相关联:
按键 行动
Alt-? 显示可能的自动补全列表。在大多数系统中,你也可以完成这个通过按两次 tab 键,这会更容易些。
Alt-* 插入所有可能的自动补全。当你想要使用多个可能的匹配项时,这个很有帮助。
可编程自动补全
目前的 bash 版本有一个叫做可编程自动补全工具。可编程自动补全允许来加入额外的自动补全规则。通常需要加入对特定应用程序的支持,来完成这个任务。例如,有可能为一个命令的选项列表,或者一个应用程序支持的特殊文件类型加入自动补全。默认情况下,Ubuntu 已经定义了一个相当大的规则集合。可编程自动补全是由 shell 函数实现的,shell 函数是一种小巧的 shell 脚本,试一下:set | less
查看
5. 利用历史命令
bash 维护着一个已经执行过的命令的历史列表。这个命令列表被保存在家目录下,一个叫做
.bash_history
的文件里。这个 history 工具是个有用资源,因为它可以减少你敲键盘的次数,尤其当和命令行编辑联系起来时。
在任何时候都可以浏览历史列表的内容,通过:
$ history | less
在默认情况下,bash 会存储输入的最后500个命令。比方说想在自己曾经用过的命令中,找出和/usr/bin 这一目录相关的。 那么就可以这样:
$ history | grep /usr/bin
得到一行
88 ls -l /usr/bin > ls-output.txt
数字 “88” 是这个命令在历史列表中的行号。可以使用另一种叫做历史命令展开的方式,来调用“88”所代表的这一行命令:
$ !88
bash 会把
“!88”
展开成为历史列表中 88 行的内容。bash也具有增量搜索历史列表的能力。意思是在字符输入的同时,bash 会去搜索历史列表(直接出结果,并高亮匹配的第一个字),每多输入一个字符都会使搜索结果更接近目标。输入Ctrl-r
来启动增量搜索,接着输入要寻找的字。当找到它以后敲入 Enter 来执行命令,或者输入Ctrl-j
,从历史列表中复制这一行到当前命令行。再次输入Ctrl-r
, 来找到下一个匹配项(历史列表中向上移动)。输入Ctrl-g
或者Ctrl-c
,退出搜索。现在看看实际效果:
$
首先输入 Ctrl-r:
(reverse-i-search)`':
提示符改变,显示正在执行反向增量搜索。搜索过程是“反向的”,按照从”现在”到过去某个时间段的顺序来搜寻。下一步,输入要查找的文本。在这个例子里是
“/usr/bin”:
(reverse-i-search)`/usr/bin': ls -l /usr/bin > ls-output.txt
上面这一行冒号后面的第一个 “/” 会高亮显示。 搜索返回需要的结果。可以按下 Enter 键来执行这个命令,或者可以
按下 Ctrl-j 复制这个命令到当前的命令行来进一步编辑它。现在复制它,输入
Ctrl-j:
$ ls -l /usr/bin > ls-output.txt
shell 提示符重新出现,命令行加载完毕,准备接受下一命令!下表列出了一些按键组合,这些按键可以用来操作历史列表:
按键 行为
Ctrl-p 移动到上一个历史条目。类似于上箭头按键。
Ctrl-n 移动到下一个历史条目。类似于下箭头按键。
Alt-< 移动到历史列表开头。
Alt-> 移动到历史列表结尾,即当前命令行。
Ctrl-r 反向增量搜索。从当前命令行开始,向上增量搜索。
Alt-p 反向搜索,非增量搜索。(输入要查找的字符串,按下 Enter来执行搜索)。
Alt-n 向前搜索,非增量。
Ctrl-o 执行历史列表中的当前项,并移到下一个。如果你想要执行历史列表中一系列的命令,这很方便。
6. 历史命令展开
通过使用 “!” 字符,shell 为历史列表中的命令,提供了一个特殊的展开类型。一个感叹号,其后再加上一个数字,可以把来自历史列表中的命令插入到命令行中。这里还有一些其它的展开特性:
序列 行为
!! 重复最后一次执行的命令。可能按下上箭头按键和 enter 键更容易些。
!number 重复历史列表中第 number 行的命令。
!string 重复最近历史列表中,以这个字符串开头的命令。
!?string 重复最近历史列表中,包含这个字符串的命令。
应该小心谨慎地使用 “!string” 和 “!?string” 格式,除非完全确信历史列表条目的内容。在历史展开机制中,还有许多可利用的特点,bash 手册页的HISTORY EXPANSION 部分详尽地讲述了所有要素。
脚本
除了 bash 中的命令历史特性,许多 Linux 发行版包括一个叫做 script 的程序,这个程序可以记录整个 shell会话,并把 shell 会话存在一个文件里面。这个命令的 基本语法是:
script [file]
命令中的 file 是指用来存储shell 会话记录的文件名。如果没有指定文件名,则使用文件 typescript。查看脚本的手册页,可以得到一个关于 script程序选项和特点的完整列表。