是否有像 Sublime Text 一样支持模糊完成的 shell?

是否有像 Sublime Text 一样支持模糊完成的 shell?

我正在使用 bash,我想知道 bash 或其他 shell 中是否有任何插件可以让我执行此操作 cat tfnislong.txt+[tab]完成,cat ThisFileNameIsSoLong.txt就像 Sublime Text 中的制表符补全一样。

答案1

我知道https://github.com/mgalgs/fuzzy_bash_completion这是一组与之一起使用的 shell 函数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才有用。

答案2

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

它的安装脚本CTRL-T将为您的 shell 设置键绑定。以下 GIF 显示了它的工作原理。

答案3

为了与您的其他答案保持一致,您可能需要研究 zsh。它向后兼容 bash,因此您可以将其用作替代品,但它支持显着扩展的功能,其中之一是大大增强了上下文感知制表符补全。

zsh 补全常见问题解答扩展了用例,但我相信根据您的示例,您最感兴趣的是该COMPLETE_IN_WORD函数。它不是理想的行为,但很接近。重点是有很多方法可以以比使用 bash 更易于理解的方式扩展基本功能。

这是一个模糊匹配扩展,可以更具体地近似您的需求; zsh-模糊匹配

你可以看看流行的哦我的天啊框架具有许多用于管理和扩展 zsh 的功能。很可能它比您想要的要多,但在插件下,您会注意到各种角色的自动完成脚本。了解功能。

相关内容