我想知道是否有办法在zsh中使用类似ipython的完成?
我的意思是在ipython中你可以键入几个字符然后遍历你的命令历史记录,但这只会影响那些以你首先输入的字符开头的命令。
如果您的历史记录如下:
token = 'something blah blah'
import os
token.split()
..然后键入token
并在ipython中循环历史记录,您将只获得第1行和第3行。
那么有没有办法让zsh以这种方式工作?
答案 0 :(得分:2)
您可以使用小部件history-beginning-search-backward
和history-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
也不循环)这不应该是一个真正的问题。