要为你的 Python 基于 prompt_toolkit
的 shell 程序添加命令行自动补全功能,你可以使用 prompt_toolkit
的自动补全机制,它提供了多种补全器(Completer),如 WordCompleter
。以下示例展示如何为你的程序添加基本的命令行自动补全:
from prompt_toolkit import PromptSession
from prompt_toolkit.completion import WordCompleter
from prompt_toolkit.key_binding.bindings.vi import load_vi_bindings
def main():
# 定义一些命令和常用词汇进行补全
shell_commands = ['quit', 'help', '!vim', '!ls', '!echo', '!cd']
shell_completer = WordCompleter(shell_commands, ignore_case=True)
# 创建一个 Vim 模式的 PromptSession,包含自动补全
session = PromptSession(completer=shell_completer)
vim_bindings = load_vi_bindings()
session.key_bindings = vim_bindings
print("聊天客户端启动。输入 'quit' 来退出。输入 '!vim' 打开 Vim 编辑器。")
while True:
try:
message = session.prompt("你 (Vim模式): ", vi_mode=True)
if message.lower() == 'quit':
break
elif message.startswith('!'):
command = message[1:].strip()
if command: # 确保命令不为空
print("执行命令: " + command)
# 在这里可以添加命令执行逻辑
else:
print("发送消息: " + message)
# 这里可以添加发送消息到后端的逻辑
except EOFError:
print("\n检测到 Ctrl-D,程序退出。")
break
except KeyboardInterrupt:
print("\n检测到 Ctrl-C,程序安全退出。")
break
if __name__ == "__main__":
main()
自动补全功能详解:
WordCompleter
:这是一个基本的补全器,可以根据提供的单词列表提供补全。在这个例子中,我们把可能的命令添加到了列表中。ignore_case=True
:使得补全不区分大小写。PromptSession(completer=shell_completer)
:在创建PromptSession
对象时传入completer
参数,以激活自动补全功能。
这种方法为用户输入提供便利,尤其是在需要输入长命令或频繁使用的命令时。通过自动补全,用户体验更佳,命令输入更快捷、错误更少。