类似iPython的zsh完成?

我想知道是否有办法在zsh中使用类似i
python的完成?

我的意思是在ipython中你可以键入几个字符,然后遍历你的命令历史记录,但这只会影响那些以你在第一时间输入的字符开头的命令.
如果您的历史记录如下:

token = 'something blah blah'    
import os
token.split()

..然后你输入令牌并在ipython中循环历史记录,你将只获得第1和第3行.

那么有没有办法让zsh以这种方式工作?

最佳答案 您可以使用小部件history-beginning-search-backward和history-beginning-search-forward.默认情况下,它们不绑定任何键,因此您必须使用bindkey执行此操作.

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

其中^ [[5~是页面向上的代码和[[6~页面向下].这些代码可能与您的终端不同.

您可以使用cat -v显示非打印字符的代码.或者您可以使用zsh / terminfo模块中的关联数组terminfo(可能已加载;请参阅zshmodules(1)和zshbuiltins(1)以获取zsh模块上的更多信息),其中应包含关键字knp中的正确代码(下一步) -page key)和kpp(上一页键):

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

说实话,这些小部件在到达历史的开头或结尾时不会循环,但是你可以向两个方向(并考虑到ipython也不循环)这应该不是一个真正的问题.

点赞