Несколько месяцев назад я написал сообщение в блоге , в котором подробно описывается, как добиться завершения табуляции в стандартном интерактивном интерпретаторе Python - функция, которая раньше считалась доступной только в IPython. Я нахожу это чрезвычайно удобным, учитывая, что мне иногда приходится переключаться на стандартный интерпретатор из-за проблем с юникодом IPython.
Недавно я проделал некоторую работу в OS X. К моему недовольству, сценарий, похоже, не работает для приложения Terminal OS 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 в терминале.