Tab 补全忽略了 Bash/Debian 中的一些文件

Tab completion ignoring some files in Bash/Debian

我在 Bash 的标准 Debian 安装中使用制表符完成功能,但我忽略了一些文件。例如,如果我有文件:

index.php
index.php.a

如果我输入 vim i,然后输入 tab,它会立即选择 "index.php "(请参阅文件名后的 space)。通常,它只会完成 "index.php" 并让我可以选择在之后输入其他内容。

为什么在这种情况下表现不同?

更新

某些命令,例如 "cp" 似乎可以很好地处理制表符补全,所以可能是 vim 在寻找特定的文件扩展名?

bash-completion package uses the function _filedir_xspec完成vim。该函数通常会完成文件名,但会排除某些模式,具体取决于它正在完成的命令。

对于vimexclusion pattern的开头是这样的:

_install_xspec '*.@([ao]|so|so.!(conf|*/*) ...

即,除其他事项外,应忽略以 .a 结尾的文件。其背后的想法可能是这些通常被创建为备份副本,您可能 不想 编辑它们。

如果您想覆盖此行为,您可以将自己的补全添加到 ~/.bash_completion;例如,要使 vim 完成所有文件名,请使用:

complete -f vim

这将使 vim 制表符补全默认为内置文件补全行为。