Python选项卡完成寻呼机

时间:2013-08-21 23:36:45

标签: python interpreter readline tab-completion

我已经尝试过搜索这个答案,要么没有正确的单词组合,要么根本找不到,但如果重复,我道歉:

当在python解释器中(从命令行运行python [3],即不是IPython或任何东西)时,如果在一个屏幕上有太多不适合的话,如何让解释器“页面”我的选项卡完成?

例如,如果我

import os
os.<tab>

在某些计算机上,它会用所有操作系统选项的柱状输出填充屏幕,底线为“更多”(好像我在输出上运行'更多'或'更少',所以到说,)我用Enter或空格键翻页。然而,在我目前的操作系统上,它只是吐出所有可能性,这需要我向上滚动以查看所有内容。

是否有一个简单的函数,我应该包含在我的.pythonstartup中,这样可以减轻这个问题?我现在所拥有的只有:

import readline
readline.parse_and_bind("tab: complete")

这显然不足以得到我想要的东西;我得到标签完成,但没有分页输出。

1 个答案:

答案 0 :(得分:1)

使用readline.set_completion_display_matches_hook设置显示功能。

这是一个快速而肮脏的示例,它只是通过column管理所有匹配项,以便在列中对其进行格式化并使用less进行显示。

import readline
import subprocess
import rlcompleter

def display_matches(substitutions, matches, longest_match_length):
    m = '\n'.join(matches) + '\n'
    proc = subprocess.Popen('column | less', shell=True, stdin=subprocess.PIPE)
    # python2:
    proc.communicate(m)
    # python3:
    # proc.communicate(m.encode('utf-8'))


readline.set_completion_display_matches_hook(display_matches)
readline.parse_and_bind('tab: complete')