0

我已尝试搜索此答案,但要么没有正确的单词组合,要么根本找不到,但如果重复,我深表歉意:

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

例如,如果我

import os
os.<tab>

在某些计算机上,它会以所有 os.* 选项的列输出填充屏幕,底线是“更多”(就好像我在输出上运行了“更多”或“更少”,可以这么说),然后我用 Enter 或空格键翻页。但是,在我当前的操作系统上,它只是吐出所有可能性,这需要我向上滚动才能看到所有内容。

是否有一个我应该包含在我的 .pythonstartup 中的简单函数可以缓解这种情况?我现在只有:

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

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

4

1 回答 1

3

使用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')
于 2013-08-22T00:43:37.653 回答