1

我最近在此处的 python interperter 中发现了自动完成功能:https ://docs.python.org/2.7/tutorial/interactive.html 。这对于加快我在交互式解释器中所做的测试非常有用。有两件事情是完整的,它们都是有用的。

如果我只是放入C+f: complete我的 .inputrc(或使用没有 rlcompleter 的 readline),当我按下 Ctl+f 时,我会在启动解释器的目录中完成文件。当我加载模块readlinerlcompleter添加readline.parse_and_bind('C-n: complete')到 .pystartup 文件时,它会将 Ctl+n 和 Ctl+f 转换为自动完成 python 对象。

我想两者都做,但不确定如何rlcompleter避免覆盖标准完成。有没有办法启动两个实例readline,一个使用,一个不使用rlcompleter

这是我的 .pystartup 文件

import atexit
import os
import readline
import rlcompleter #removing this does file completion.

readline.parse_and_bind('C-n: complete')

historyPath = os.path.expanduser("~/.pyhistory")

def save_history(historyPath=historyPath):
    import readline
    readline.write_history_file(historyPath)

if os.path.exists(historyPath):
    readline.read_history_file(historyPath)

atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath
4

1 回答 1

0

这个怎么运作:

当您 importrlcompleter时,它会安装rlcompleter.Completer().completereadline'completer: readline.set_completer(Completer().complete)

没有rlcompleter, completeris None,所以rl_filename_completion_function默认使用底层 GNU readline lib。

绑定键和完成逻辑由 GNU readline lib 实现,因此在 Python 中没有什么可做的start up two instances of readline......


我没有找到rl_filename_completion_function在 Python 中调用 default 的方法(在 C 扩展中是可能的),所以我想你必须复制rl_filename_completion_functionPython 中的逻辑。

这意味着您应该继承Completer并构建您的自定义complete. 但是您仍然不能将这两个逻辑拆分为C-nand C-f:(

于 2018-08-23T18:38:59.247 回答