【问题标题】:Readline autocomplete and whitespaceReadline 自动完成和空格
【发布时间】:2014-01-08 13:50:28
【问题描述】:

我在 python 中使用 readline 进行自动补全

我想拥有它,所以如果我有:

names = ['ben dodds', 'james asda', 'izzy smidt']

当我有

> Insert name: 
> be TAB
ben dodds
> ben TAB
ben dodds, james asda, izzy smidt

最后一个是错误的,因为它应该只显示 ben dodds

这是我目前的代码:

def completer(text, state):
    options = [x for x in names if x.startswith(text)]
    try:
        return options[state]
    except IndexError:
        return None



readline.set_completer(completer)
if 'libedit' in readline.__doc__:
    readline.parse_and_bind("bind ^I rl_complete")
else:
    readline.parse_and_bind("tab: complete")

name = raw_input('Enter name\n')
print name

到目前为止,我收集到它与 readline.set_completer_delims() 有关,但我不知道如何让它工作,任何帮助将不胜感激

我已经试过了

    readline.set_completer_delims('')

没用

【问题讨论】:

    标签: python autocomplete readline


    【解决方案1】:

    试试这个:

    readline.set_completer_delims('')
    

    我将该行添加到您的脚本中,如下所示:

    import readline
    
    
    names = ['ben dodds', 'james asda', 'izzy smidt']
    
    def completer(text, state):
        options = [x for x in names if x.startswith(text)]
        try:
            return options[state]
        except IndexError:
            return None
    
    
    readline.set_completer(completer)
    readline.set_completer_delims('')
    
    if 'libedit' in readline.__doc__:
        readline.parse_and_bind("bind ^I rl_complete")
    else:
        readline.parse_and_bind("tab: complete")
    
    name = raw_input('Enter name\n')
    print name
    

    这为我解决了这个问题(在 64 位 Ubuntu 12.04 上使用 python 2.7.3 或 2.7.6)。

    【讨论】:

    • 您确定您输入的是 ben SPACE TAB 吗?不只是本 TAB
    • 是的。当我输入ben<SPACE><TAB> 时,它会完成ben dodds。如果我注释掉对set_completer_delims 的调用,我会得到多项选择。
    • 我认为问题与使用 libedit 的 Mac 有关,请参阅 docs.python.org/2/library/readline.html 知道如何克服这个问题吗?
    猜你喜欢
    • 2016-01-07
    • 1970-01-01
    • 2014-01-04
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2012-06-12
    相关资源
    最近更新 更多