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 所示。
图 2.2: 在 GIMP 中自动补全文件名