有没有像 Sublime Text 那样支持模糊补全的 shell?

woo*_*ngs 15 bash shell tab-completion

我正在使用 bash,我想知道 bash 或其他 shell 中是否有任何插件允许我执行此操作 cat tfnislong.txt+[tab]完成cat ThisFileNameIsSoLong.txt就像 Sublime Text 中的选项卡完成一样。

mwm*_*mwm 11

我知道https://github.com/mgalgs/fuzzy_bash_completion这是一堆与complete.

我认为我们可能会做得更好一些,更简洁。是时候打开你的 .bashrc 或 .profile ...

我们使用的基本钩子是这样的:

complete -o nospace -o filenames -F fuzzypath cd ls cat

-F 选项表示使用 shell 函数进行制表符补全,其中选项设置在COMPREPLY变量中。例如:

函数模糊路径(){
    如果 [ -z $2 ] 
    然后
        COMPREPLY=(`ls`)
    别的
        DIRPATH=`echo "$2" | gsed 's|[^/]*$||'`
        BASENAME=`echo "$2" | gsed 's|.*/||'`
        FILTER=`echo "$BASENAME" | gsed 's|.|\0.*|g'`
        COMPREPLY=( `ls $DIRPATH | grep -i "$FILTER" | gsed "s|^|$DIRPATH|g"` )
    菲
}

DIRPATH您正在输入的路径上的最后一个 / 之前的所有内容在哪里,以及BASENAME您的光标当前所在的位置。

FILTER是模糊性的来源。基本上,在每个字符之间BASENAME插入.*并生成我们的模糊正则表达式。

剩下的就是将正则表达式与 ls 结合起来产生COMPREPLY. 您可能会在这里找到更多聪明的事情要做,也许使用find.

我还发现http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html很有用。


Jun*_*hoi 7

您可能会发现fzf很有用。这是一个用 Ruby 编写的通用模糊查找器,可用于任何事物列表:文件、进程、命令历史、git 分支等。

它的安装脚本将为CTRL-T您的 shell设置键绑定。下面的 GIF 展示了它是如何工作的。