Python readline模块:设置2字符分隔符

2 投票
1 回答
868 浏览
提问于 2025-04-17 01:14

我正在使用 readline 模块来自动补全名字(名字和姓氏)。

我想设置一个由两个字符组成的分隔符,但当我使用 readline.set_completer_delims(', ') 时,它同时把逗号和空格都当作分隔符。不过我只想要这两个字符一起作为分隔符。

问题是,现在我输入一个存在多次的名字,但每次的姓氏都不同。这样一来,readline 就会认为空格是分隔符,开始重新建议所有的名字,而不是给出所有可能的姓氏。

我该怎么解决这个问题呢?


进一步的信息是:我已经在使用一个自定义的补全函数:

# Configure and enable tab completion
def completer(text, state):
    """Contacts completer function for readline module"""
    options = [x[2].strip() for x in contacts
               if x[2].lower().startswith(text.strip().lower())]
    try:
        return options[state] + ', '
    except IndexError:
        return None

readline.set_completer(completer)

问题并不是这个函数工作不正确。我调试过,当我补全一个以空格结尾的词(比如 "simon ")时,传给补全器的 text 值是 " ",而不是 "simon "

1 个回答

0

你可能需要自己写一个函数来实现这个功能,使用下面的代码:

readline.set_completer([function])

根据Python文档:

“补全函数的调用方式是 function(text, state),其中 state 的值是 0, 1, 2,依此类推,直到它返回一个非字符串的值。这个函数应该返回以 text 开头的下一个可能的补全。”

撰写回答