Примечания: Работает на Python3> 3.2. Он НЕ является заменой «import readline» в других сценариях, но эти сценарии можно легко настроить. Он может сосуществовать с readline.so - здесь есть код для файла sitecustomize.py, который разрешает выбор. Он может использовать дистрибутив libedit.so, пользовательский или libedit, встроенный в само расширение.

лько месяцев назад я написалСообщение блога подробное описание того, как добиться завершения табуляции в стандартном интерактивном интерпретаторе Python - функция, о которой я когда-то думал только в IPython Я нашел это чрезвычайно удобным, учитывая, что мне иногда приходится переключаться на стандартный интерпретатор из-за проблем с юникодом IPython.

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

Ответы на вопрос(7)

Ваш ответ на вопрос