2.1 何谓补全

现在回过头来看,在学习命令行时,我最想率先学习的功能一定是自动补全。为什么这么说呢?因为自动补全这项功能让我们只需输入开头的一个或几个字符便能通过 Shell 自动补全剩下的内容。对于痛恨输入长命令或文件名的朋友而言,自动补全绝对是福音。自动补全不仅减少了输入,而且节省了时间,从而极大的提高了我们的操作效率。

让我们通过一个例子来说明何谓自动补全。首先,我通过在 bash 中直接输入完整的命令行

xiaodong@codeland:~$ ls -l reallylongname.txt

来查看 reallylongname.txt 这个文本文件的信息。

然后,我在输入

xiaodong@codeland:~$ ls -l r

之后按 Tab 键,于是 bash 帮我自动补全了该文件名剩下的部分。

xiaodong@codeland:~$ ls -l reallylongname.txt

比较两次输入,bash 帮我少输了 17 个字符。是不是感觉很爽呢?

再看一个例子:这次,我在输入

xiaodong@codeland:~$ ls -l f

后按 Tab,bash 自动补全了 file

xiaodong@codeland:~$ ls -l file

接着,我连按两下 Tab,这时 bash 向我们展示了可以自动补全的文件名列表,总共包括 5 个项目。

xiaodong@codeland:~$ ls -l file
file1  file2  file3  file4  file5

我输入 1 来完成 bash 自动补全过程。

比较这两个例子,我们可以发现,如果我们输入的开头字符唯一,那么 bash 将直接自动补全余下的内容。反之,则提供一个可供补全的备选列表。不过,这时候需要我们连按两下 Tab 键。这样的话,经常操作起来感觉还是有点麻烦。

下面我们对 bash 自动补全的配置进行一番优化,使之更加好用。利用文本编辑器打开 ~/.inputrc 文件 (若不存在,则创建一个),加入下列内容:

# completion
set show-all-if-ambiguous on
set visible-stats on
set colored-completion-prefix on

其中,开启 show-all-if-ambiguous 这个选项后,我们只需按一次 Tab 即可看到备选补全列表;visible-stats 选项通过在列表项目尾部添加指示符号来说明类型,例如:@ 代表符号链接、/ 代表目录等;最后的 colored-completion-prefix 选项则给补全的前缀字符加上颜色。如图 2.1 所示。

bash 自动补全配置结果

图 2.1: bash 自动补全配置结果