智能选项卡完成(用于目录)?

deh*_*ann 7 linux bash shell tab-completion

是否有具有更智能选项卡完成功能的 shell 版本?

我希望能够打字

cd foo-<TAB>
Run Code Online (Sandbox Code Playgroud)

然后它会向我显示可能的完成以及我可以输入的数字以选择其中之一:

cd foo-<TAB>
(1) foo-bar1  (2) foo-bar2  (3) foo-bad
Run Code Online (Sandbox Code Playgroud)

所以,在<TAB>我打字之后3,它会带我到foo-bad. 或者,使用箭头键而不是输入数字也可以。

Den*_*son 10

menu-complete每次按 Tab 键时,您都可以在 Bash中启用单步执行命令行上的条目。这不是您真正要寻找的。如果您想尝试一下,请在命令提示符下执行此操作:

bind '"\C-i": menu-complete'
Run Code Online (Sandbox Code Playgroud)

要使其持久化,请将其添加到您的~/.inputrc文件中:

"\C-i": menu-complete
Run Code Online (Sandbox Code Playgroud)

Zsh 具有允许您使用箭头键选择条目的功能。将此(或其他变体)添加到您的~/.zshrc文件中:

zstyle ':completion:*' menu select=0
Run Code Online (Sandbox Code Playgroud)

查看man zshcompsys并搜索“select=”(它将位于menu“标准样式”部分)以获取更多信息。

否则,在 Bash 中,您可以编写一个函数(甚至创建您自己的完成函数)来根据select命令执行某些操作。这是非常简单的:

$ select a in x y z; do cd $a; done
1) x
2) y
3) z
#?
Run Code Online (Sandbox Code Playgroud)

你必须充实它才能让它做你想做的事。


Ric*_*lka 9

你已经使用正常完成了吗?尝试

complete -d cd pushd rmdir
Run Code Online (Sandbox Code Playgroud)

在你的 shell 中,看看它是否足够接近你想要的。

您也可以尝试 zsh ,它比 bash 具有更好的完成度。

  • 我正在寻找一种方法来为 cd 排除非目录进行自动完成。这做到了。你摇滚。 (2认同)