При написании кода на Python (используя gvim) я часто сохраняю сложные команды командной строки для тестовых случаев, сохраненных в моих строках документации. Распространенная ошибка, которую я трачу впустую, - это копирование всей строки из файла python и вставка его в терминал.

Например, одна из моих функций выглядит так

@profile
def incremental_test(ibs, qaid_list, daid_list=None):
    """
    Plots the scores/ranks of correct matches while varying the size of the
    database.

    Args:
        ibs       (list) : IBEISController object
        qaid_list (list) : list of annotation-ids to query

    CommandLine:
        python dev.py -t inc --db PZ_MTEST --qaid 1:30:3 --cmd

        python dev.py --db PZ_MTEST --allgt --cmd

        python dev.py --db PZ_MTEST --allgt -t inc

        python dev.py -t inc --db PZ_MTEST --qaid 1:30:3 --cmd

        python dev.py -t inc --db PZ_Master0
        python dev.py -t inc --db GZ_ALL --ninit 100 --noqcache

    Example:
        >>> from ibeis.all_imports import *  # NOQA
        >>> ibs = ibeis.opendb('PZ_MTEST')
        >>> qaid_list = ibs.get_valid_aids()
        >>> daid_list = None
    """
    from ibeis.model.hots import automated_matcher
    ibs1 = ibs
    num_initial = ut.get_argval('--ninit', type_=int, default=0)
    return automated_matcher.incremental_test(ibs1, num_initial)

И я хочу скопировать одну из различных команд в терминал, чтобы проверить это.

Первоначально, когда я копирую и вставляю одну из этих строк, все работает нормально, но если я изменяю код и хочу снова запустить тест, я обнаруживаю, что нажимаю стрелку вверх, чтобы перейти к предыдущей команде в моей истории. Но так как у команды были первые пробелы, я получаю другую команду. Хуже всего то, что предыдущая команда часто очень похожа; может быть, я добавил флаг --verbose или что-то в этом роде, поэтому я не всегда ловлю его сразу

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

На этом модном примере мой вопрос:

Есть ли способ настроить gnome-терминал таким образом, чтобы при нажатии стрелки вверх он выдавал последнюю команду, даже если он имеет начальный пробел.

Я думаю, что альтернативный обходной путь будет для Ctrl + Shift + C в Vim, чтобы скопировать строку в буфер обмена, но пропустить пробел, но я бы предпочел терминальный взломать.

1 ответ1

3

Это вызвано значением ignorespace в $HISTCONTROL . От man bash:

HISTCONTROL

Список значений, разделенных двоеточиями, управляющий тем, как команды сохраняются в списке истории. Если в списке значений есть пробел игнорирования, строки, начинающиеся с пробела, не сохраняются в списке истории.

Это может быть вызвано переменной HISTIGNORE , хотя обычно она содержит команды для пропуска.

Просто перенастройте вашу историю оболочки в ~/.bashrc , установив различные значения по умолчанию, например

HISTIGNORE=ignoredups

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .