Ole*_*nge 11 bash autocomplete
自从选项卡完成成为 shell 的标准功能以来,我一直是它的一个非常高兴的用户。我什至喜欢 Bash 的智能补全(它只搜索 PDF 文件,如果我输入 evince foo<TAB>)——只要它猜对了。
当 Bash 使用其智能完成来拒绝完成时,它破坏了原本快乐的一天。
今天我想:
tar xvf centos5.8_x86_1.ova
Run Code Online (Sandbox Code Playgroud)
所以我输入:
tar xvf cent<TAB>
Run Code Online (Sandbox Code Playgroud)
并且 Bash 拒绝完成路径,因为 .ova-files 不是您通常与 tar 一起使用的文件。
我知道我可以卸载 bash-completion 包来删除智能完成。但是我可以吃蛋糕也吃吗?
我可以要求 bash 先使用智能完成,如果失败,然后使用非智能完成吗?
Mat*_*ieu 10
在程序 tar、vim 和 emacs 的所有“智能”完成失败后,以下内容应该打开正常的 bash 完成:
compopt -o bashdefault tar vim emacs
Run Code Online (Sandbox Code Playgroud)
另请参阅在线 bash 手册中的相关页面。
警告:您将获得由手头命令的智能完成定义的完成类型(命令/文件名/用户名等)的正常行为,例如,service即使您调用complete -o bashdefault service.
在这个和其他,其中智能自动完成故障时,可以随时按个案Alt-/(或M-/在bash的手册的符号)到完整的文件名几乎相同的方式,TAB工作,如果智能完井被禁用(几乎相同的方式在一定意义M-/不完整的模式,如*.txt)。有关其他类型补全(例如命令和用户名)的键序列,请参见此处。
bash 完成是 bash 标准完成的扩展,它本身就是一个 bash 程序。因此,如果您想更改程序的行为方式,只需更改它即可。这是免费软件,您可以自由使用。对于该命令的特定情况tar,该文件是/usr/share/bash-completion/completions/tar. 要tar自动完成扩展名为 的文件ova,只需将其添加到该行
local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'
Run Code Online (Sandbox Code Playgroud)
所以它说
local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'
Run Code Online (Sandbox Code Playgroud)
请注意,这是 Debian Wheezy(当前稳定版本)的路径和现有代码。不同的发行版或版本可能有不同的代码,但想法是相同的。打开代码并调整它以执行您希望它执行的操作。
编辑:我刚刚注意到问题是关于每次它找不到匹配项而不仅仅是添加ova到的具体情况tar。也许它对某人仍然有用,知道他们可以在哪里寻找来源。
| 归档时间: |
|
| 查看次数: |
3106 次 |
| 最近记录: |