【问题标题】:bash tab completion filter out optionsbash 选项卡完成过滤掉选项
【发布时间】:2012-06-28 04:49:34
【问题描述】:

我想让 bash 中的制表符补全更加智能。

假设我有一个文件夹,其中包含 src 文件 .lisp,以及该文件的编译版本 .fasl。我想输入 vi 文件名 [tab tab],并且 .lisp 自动完成是唯一的选项。也就是说,我不太可能希望 vim 打开已编译的二进制文件,因此不要将它放在自动完成选项列表中以进行循环。

有没有一种方法可以让我保留一个自动完成忽略的扩展名列表,或者以某种方式为 vim 自定义它,以便当 bash 命令以 vi 开头时,自动完成只忽略特定的文件扩展名...

感谢任何想法。

谢谢!

【问题讨论】:

标签: bash


【解决方案1】:

来自man bash

FIGNORE

执行时要忽略的以冒号分隔的后缀列表 文件名完成。后缀与FIGNORE 中的条目之一匹配的文件名将从 匹配的文件名列表。样本值为".o:~"(引用为 为该变量赋值时需要,其中包含 波浪号)。

因此,对于您的示例,这可以在您的 .bashrc 文件中设置

FIGNORE=".o:~:.fasl"

或者,如果您想保留任何其他站点范围的设置:

FIGNORE=".o:~:.fasl:$FIGNORE"

【讨论】:

  • 对于像我这样对所有这些东西有点基础的用户,你能解释一下我们是如何设置这个变量的(或者它是一个文件吗?)。谢谢。
  • 好吧,我发现自己:我把 export FIGNORE=".aux:.log:.dvi:.pdf:" 放在我的 .bashrc 文件中。顺便说一句,我这样做是为了我的乳胶工作,所以当我输入 vim mylatexf 时,它将完成到 mylatexfile.tex 而不仅仅是向我显示可能的完成列表,如 mylatexfile.aux、mylatexfile.dvi 等。
  • 完整的命令很好,但这是问题的真正答案。
【解决方案2】:

bash complete 命令似乎是您想要的。

这是一个 Linux Journal 链接,指向'complete' command video。这是后续页面More on Using the Bash Complete Command

链接解释得很好,这里有一个相关的 SO 问题/答案:Bash autocompletion across a symbolic link

【讨论】:

  • 谢谢!这工作得很好。但是,我无法在我的 bashrc 中使用 -f 版本,b/c 它覆盖了 /opt/local/etc/bash_completion 中的 -F 版本。所以我只是将 .dx64fsl 编译的二进制扩展添加到 bash_completion 文件(调整了 -F 版本)。如果 Macports 更新它,我会注意到的。
猜你喜欢
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
相关资源
最近更新 更多