【问题标题】:Tab completion ignoring some files in Bash/Debian选项卡完成忽略 Bash/Debian 中的一些文件
【发布时间】:2020-01-27 21:13:25
【问题描述】:

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

index.php
index.php.a

如果我输入vim i 然后tab 它会立即选择“index.php”(见文件名后的空格)。通常,它只会完成“index.php”,然后让我可以选择输入其他内容。

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

更新

“cp”等一些命令似乎可以很好地处理制表符补全,所以可能是 vim 正在寻找特定的文件扩展名?

【问题讨论】:

  • 如果你只有 index.php.a 会发生什么?
  • @MicheleDorigatti 选项卡完成(使用 vim)看不到它。
  • 您可以使用complete -p vim 来检查幕后发生的事情,然后在它显示给您的函数名称上使用type。对我来说,vim 制表符补全只是一个默认的文件名补全功能,_filedir_xspec – 请参阅here。我的猜测是通常与备份副本相关的扩展被故意忽略。
  • 我的问题已关闭,但是,其他页面上的答案似乎没有回答我的问题。
  • 具体来说,here 你可以看到vim 被忽略的内容,包括以.a 结尾的文件名。

标签: bash vim tab-completion


【解决方案1】:

bash-completion包使用函数_filedir_xspec完成vim。该函数通常会完成文件名,但会根据正在完成的命令排除某些模式。

对于vimexclusion pattern 的开头如下:

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

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

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

complete -f vim

这将使vim 选项卡完成默认为内置文件完成行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多