小编典典

OS X Terminal中Python解释器中的制表符完成

python

几个月前,我写了一篇博客文章,详细介绍了如何在标准的Python交互式解释器中实现制表符补全-
我曾经认为该功能仅在IPython中可用。考虑到由于IPython unicode问题有时不得不切换到标准解释器,所以我发现它非常方便。

最近,我在OS X中做了一些工作。不满的是,该脚本似乎不适用于OS X的Terminal应用程序。我希望一些在OS
X方面有经验的人能够帮助我解决它,以便它也可以在Terminal中使用。

我正在复制下面的代码

import atexit
import os.path

try:
    import readline
except ImportError:
    pass
else:
    import rlcompleter

    class IrlCompleter(rlcompleter.Completer):
        """
        This class enables a "tab" insertion if there's no text for
        completion.

        The default "tab" is four spaces. You can initialize with '\t' as
        the tab if you wish to use a genuine tab.

        """

        def __init__(self, tab='    '):
            self.tab = tab
            rlcompleter.Completer.__init__(self)


        def complete(self, text, state):
            if text == '':
                readline.insert_text(self.tab)
                return None
            else:
                return rlcompleter.Completer.complete(self,text,state)


    #you could change this line to bind another key instead tab.
    readline.parse_and_bind('tab: complete')
    readline.set_completer(IrlCompleter('\t').complete)


# Restore our command-line history, and save it when Python exits.
history_path = os.path.expanduser('~/.pyhistory')
if os.path.isfile(history_path):
    readline.read_history_file(history_path)
atexit.register(lambda x=history_path: readline.write_history_file(x))

请注意,我已经从博客文章中的版本中对其进行了稍微的编辑,以便IrlCompleter使用真正的制表符对进行初始化,这似乎是Terminal中Tab键输出的结果。


阅读 188

收藏
2021-01-20

共1个答案

小编典典

为了避免不得不使用更多的GPL代码,Apple不提供真正的读取线。取而代之的是,它使用BSD许可的libedit,它仅在大多数情况下与readline兼容。如果要完成,请构建自己的Python(或使用Fink或MacPorts)。

2021-01-20