几个月前,我写了一篇博文,详细介绍了如何在标准 Python 交互式解释器中实现制表符补全——我曾经认为这个功能只能在 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 键输出的内容。