2.3 文件名、路径名补全
前面的例子显示的是在 bash 中文件名自动补全的情况。下面我们看一个在 zsh 中自动补全文件名的例子。当我输入
后按 Tab,zsh 为我自动补全了 file
。
我接着再按 Tab 键,这时 zsh 提供了可以备选的自动补全菜单。
再次按 Tab 则可以选择具体的菜单项目。
然后按回车键完成自动补全过程。
最后再按一次回车键执行命令。
不知大家有没有发现与 bash 补全的区别呢?bash 提供的备选补全列表不能选择具体的项目,而 zsh 则可以。这也说明与 bash 相比,zsh 具有更棒的用户交互功能。所以我平常也更喜欢使用 zsh 一些。如果你还没有用过 zsh,那么我在此建议你一定要试一试。
说到备选补全列表,在 bash 中我喜欢使用的一组快捷键是 Alt + ?。当 bash 补全 file
后,我没有按 Tab,而是按 Alt + ?,bash 就立即呈现了备选补全列表。
还有一种情况,有时候我们希望 Shell 不要补全某些特别的文件类型。为了达到这种效果,我们可以使用 FIGNORE
变量。在下面的例子中,我想查看 Welcome.java
的内容,因此只想 Shell 补全 .java
文件,并排除 .class
文件。
在将 .class
扩展名赋给 FIGNORE
变量后,Shell 就为我剔除掉了 .class
文件类型。
xiaodong@codeland:~$ FIGNORE='.class'
xiaodong@codeland:~$ cat W<Tab>
xiaodong@codeland:~$ cat Welcome.java
如果想要排除多种文件类型,则只需用 :
(冒号) 分隔即可。例如:
这将让 Shell 在自动补全时排除 .o
和 .class
文件。无论是 bash,还是 zsh,当前都支持 FIGNORE
。
路径名补全和文件名补全很相似,只是在补全后自动追加上 /
(斜杠),便于我们输入下一级的路径名。在下例中,我在输入
后按 Tab,Shell 补完了全名,并在其后添加了一个 /
。
之后我接着输入 s
并按 Tab,这次 Shell 补全了下级目录 src
。
对于开头字符不唯一的情况,跟文件名补全也是一样,bash 中只要按 Tab 即可看到备选补全列表。
顺便提一句,自动补全不光在命令行下使用,即便在有些图形化程序中也能使用。比如,在 GIMP 中,我也可以通过自动补全来打开文件。如图 2.2 所示。