【问题标题】:iPython-like completion for zsh?zsh 的类似 iPython 的完成?
【发布时间】:2014-03-22 21:45:11
【问题描述】:

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

我的意思是在 ipython 中你可以输入几个字符,然后循环浏览你的命令历史,但这只会影响那些以你首先输入的字符开头的命令。
如果你的历史是这样的:

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

..然后你输入token 并在 ipython 中循环浏览历史,你只会得到第一行和第三行。

那么有什么办法可以让 zsh 以这种方式工作吗?

【问题讨论】:

    标签: ipython zsh tab-completion


    【解决方案1】:

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

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

    ^[[5~page up 的代码,[[6~page down 的代码。这些代码可能因您的终端而异。

    您可以使用cat -v 来显示非打印字符的代码。或者,您可以使用来自zsh/terminfo 模块的关联数组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,但历史循环的行为方式相同。
    • 但是!感谢您的回答,我终于找到了我需要的东西!这个插件完全符合我的要求:github.com/zsh-users/zsh-history-substring-search
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    相关资源
    最近更新 更多