☰ Оглавление

Как включить в командной строке Python автодополнение и историю

Python-ская часть

Очень просто. Вам нужен небольшой скрипт, который будет незаметно запускаться при каждом старте вашего Python (как это сделать — чуть ниже). Вот скрипт:

def xscope():
    import sys, os, readline, errno, atexit, rlcompleter

    if sys.version_info.major == 3:
        sys.ps1='\001\033[32;1m\002>>>\001\033[0m\002 '
        sys.ps2='\001\033[32m\002...\001\033[0m\002 '
    else:
        sys.ps1='\001\033[33;1m\002>>>\001\033[0m\002 '
        sys.ps2='\001\033[33m\002...\001\033[0m\002 '

    histfile = os.path.join(os.environ["HOME"], ".pyhist")
    try:
        readline.read_history_file(histfile)
    except IOError:
        if e.errno != errno.ENOENT:
            pass
    atexit.register(readline.write_history_file, histfile)

    readline.parse_and_bind("tab: complete")

xscope()
del xscope

Тут три секции, каждую из которых вы можете поправить по своему вкусу. Первая подкрашивает приглашение для ввода команд. Причём по втором Python вы будете видеть жёлтое приглашение, в третьем — зелёное. Это удобно и эту мысль можно развить. Скажем, не включать раскраску, если вы подключены по ssh (анализировать наличие переменной os.environ(["SSH_CONNECTION"])).

Вторая секция обеспечивает работу с историей, третья — отвечает за автодополнение.

Весь код заключён в функцию, чтобы результаты его работы наводили никаких эффектов на дальнейшую работу. И саму эту функцию тоже удаляем, чтобы обеспечить полную чистоту контекста.

Shell-часть

Чтобы всё это всегда запускалось само, надо положить этот код в какой-нибудь подходящий файл. Скажем, $HOME/bin/initialize.py. И прописать этот путь в переменную PYTHONSTARTUP в каком нибудь подходящем файле. Скажем в ~/.bashrc:

export PYTHONSTARTUP=$HOME/bin/initialize.py

Всё. Теперь просто запускаете Python и наслаждаетесь.

Как временно отказаться от этого

Возможно, в какой-то момент в вашем initialize.py окажется слишком много логики и красоты. Чтобы запустить python без выполнения initialize.py, просто задайте неправильное значение для PYTHONSTARTUP. Сделать это можно одной строкой:

PYTHONSTARTUP='' python2

Полезной, так же, является связка с env -i, но это для более тяжёлых случаев:

env -i python2

Успехов!