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
。该函数通常会完成文件名,但会排除某些模式,具体取决于它正在完成的命令。
对于vim
,exclusion pattern的开头是这样的:
_install_xspec '*.@([ao]|so|so.!(conf|*/*) ...
即,除其他事项外,应忽略以 .a
结尾的文件。其背后的想法可能是这些通常被创建为备份副本,您可能 不想 编辑它们。
如果您想覆盖此行为,您可以将自己的补全添加到 ~/.bash_completion
;例如,要使 vim 完成所有文件名,请使用:
complete -f vim
这将使 vim
制表符补全默认为内置文件补全行为。
我在 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
。该函数通常会完成文件名,但会排除某些模式,具体取决于它正在完成的命令。
对于vim
,exclusion pattern的开头是这样的:
_install_xspec '*.@([ao]|so|so.!(conf|*/*) ...
即,除其他事项外,应忽略以 .a
结尾的文件。其背后的想法可能是这些通常被创建为备份副本,您可能 不想 编辑它们。
如果您想覆盖此行为,您可以将自己的补全添加到 ~/.bash_completion
;例如,要使 vim 完成所有文件名,请使用:
complete -f vim
这将使 vim
制表符补全默认为内置文件补全行为。