Python prompt_toolkit:当用户按下回车键时选择最佳模糊匹配

我正在通过 CLI使用FuzzyCompleterfrom for 。prompt_toolkit我另外传递complete_while_typing=Trueprompt函数。

如果我提供包含例如“测试”的列表并且用户键入“tst”,它将显示为第一个建议。但是如果用户随后按下回车,prompt函数的结果将是“tst”,而不是“Testing”。如果用户按 Tab 然后输入,它当然可以工作。

我希望该prompt函数仅返回完成列表中的值,而不是用户键入以快速匹配的“tst”之类的无意义的字符串。输入前的制表符不应该是必需的。我怎样才能做到这一点?


GCT1015
浏览 144回答 1
1回答

精慕HU

您可以创建自定义键绑定以在用户按 Enter 时执行完成。例如:from prompt_toolkit import promptfrom prompt_toolkit.completion import FuzzyWordCompleterfrom prompt_toolkit.key_binding import KeyBindingsfrom prompt_toolkit.filters import (    has_completions,    completion_is_selected,)# Override enter key to automatically perform first completion.key_bindings = KeyBindings()filter = has_completions & ~completion_is_selected@key_bindings.add("enter", filter=filter)def _(event):    event.current_buffer.go_to_completion(0)    event.current_buffer.validate_and_handle()completer = FuzzyWordCompleter([    "Using", "Testing", "Building", "Designing", "Documenting"])result = prompt("$ ",    completer=completer,    complete_while_typing=True,    key_bindings=key_bindings,)if result:    print(result)将被覆盖的键绑定当前位于shortcuts/prompt.py和中key_binding/bindings/basic.py。如果您的提示应用程序更复杂(例如多行输入或多个缓冲区),那么您可能需要额外的逻辑来处理这些情况。 prompt_toolkit.filters.is_multiline可能有用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python