当前位置:  开发笔记 > 编程语言 > 正文

OS X终端中Python解释器的Tab-completion

如何解决《OSX终端中Python解释器的Tab-completion》经验,为你挑选了3个好方法。

几个月前,我写了一篇博客文章,详细介绍了如何在标准的Python交互式解释器中实现tab-completion - 这个功能我曾经认为只在IPython中可用.由于IPython unicode问题,我有时不得不切换到标准解释器,因此我发现它非常方便.

最近我在OS X中做了一些工作.令我不满的是,脚本似乎不适用于OS X的终端应用程序.我希望你们中的一些有OS X经验的人可以帮助我解决问题,这样它也可以在终端中运行.

我正在复制下面的代码

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使用真正的选项卡初始化,这似乎是终端中Tab键输出的内容.



1> B0rG..:

这应该在Leopard的python下工作:

import rlcompleter
import readline
readline.parse_and_bind ("bind ^I rl_complete")

而这个不是:

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

将其保存在〜/ .pythonrc.py中并在.bash_profile中执行

export PYTHONSTARTUP=$HOME/.pythonrc.py



2> FarMcKon..:

这是Windows/OS X/Linux的一个完整的跨平台版本的加载选项卡完成:

#Code  UUID = '9301d536-860d-11de-81c8-0023dfaa9e40'
import sys
try:
        import readline
except ImportError:
        try:
                import pyreadline as readline
        # throw open a browser if we fail both readline and pyreadline
        except ImportError:
                import webbrowser
                webbrowser.open("http://ipython.scipy.org/moin/PyReadline/Intro#line-36")
                # throw open a browser
        #pass
else:
        import rlcompleter
        if(sys.platform == 'darwin'):
                readline.parse_and_bind ("bind ^I rl_complete")
        else:
                readline.parse_and_bind("tab: complete")

来自http://www.farmckon.net/?p=181



3> 小智..:

为避免使用更多GPL代码,Apple不包含真正的readline.相反,它使用BSD许可的libedit,它只与读取线兼容.如果要完成,请构建自己的Python(或使用Fink或MacPorts).

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有