类似于iPython的zsh自动补全功能?

4
我想知道是否有办法在zsh中使用类似ipython的自动补全功能?
我的意思是,在ipython中,你可以键入几个字符,然后循环浏览你的命令历史记录,但这只会影响那些以你所输入的字符开头的命令。如果你的历史记录如下:
token = 'something blah blah'    
import os
token.split()

如果你在ipython中输入token并遍历历史记录,你只会得到第一和第三行。那么有没有办法让zsh也这样工作呢?

1个回答

2

你可以使用小部件history-beginning-search-backwardhistory-beginning-search-forward来实现这一点。 默认情况下,它们未绑定到任何键,因此您需要使用bindkey进行绑定。

bindkey "^[[5~" history-beginning-search-backward
bindkey "^[[6~" history-beginning-search-forward

^[[5~向上翻页的代码,[[6~则表示向下翻页的代码。这些代码可能因为您所使用的终端而不同。

您可以使用cat -v命令来显示非打印字符的代码。或者您也可以使用关联数组terminfo,该数组位于zsh/terminfo模块中(该模块可能已经被加载;有关zsh模块的更多信息,请参阅zshmodules(1)zshbuiltins(1)),其中应包含正确的代码在knp(下一页键)和kpp(上一页键)键中:

if (( ${+terminfo[knp]} )) && (( ${+terminfo[kpp]} )); then
     bindkey "${terminfo[kpp]}" history-beginning-search-backward
     bindkey "${terminfo[knp]}" history-beginning-search-forward
fi

坦白地说,这些小部件在到达历史记录的开头或结尾时不会循环,但考虑到您可以向两个方向移动(并且考虑到ipython也不循环),这应该不是一个真正的问题。

很抱歉,这个不起作用。我修改了我的__zshrc__文件,但是历史记录循环的行为仍然相同。 - roboslone
但是!感谢您的答案,我最终找到了我需要的东西!这个插件正好做我想要的事情:https://github.com/zsh-users/zsh-history-substring-search - roboslone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接