类似iPython的zsh完成?

时间:2014-03-22 21:45:12

标签: ipython zsh tab-completion

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

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

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

..然后键入token并在ipython中循环历史记录,您将只获得第1行和第3行。

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

1 个答案:

答案 0 :(得分:2)

您可以使用小部件history-beginning-search-backwardhistory-beginning-search-forward。默认情况下,它们不会绑定到任何键,因此您必须使用bindkey执行此操作。

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

^[[5~页面向上的代码,{em>向下翻页的[[6~。这些代码可能与您的终端不同。

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

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

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