Python readline模块:设置2字符分隔符
我正在使用 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 开头的下一个可能的补全。”