2

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

Например, предположим, что вы делаете это:

$ vi mysource.c  
$ make  
$ make test  

Затем предположим, что ваш тест не пройден , и вы хотите повторить эти шаги снова, поэтому вы нажимаете стрелку вверх 3 раза, чтобы вернуться к vi mysource.c , и нажимаете return, чтобы запустить его. Затем, при следующем запросе, я хочу иметь возможность нажать стрелку вниз один раз, чтобы make . И в следующем приглашении я хочу нажать один раз стрелку вниз, чтобы make test .

Я не знаю, сводится ли это к настройкам bash по умолчанию в Mac OS X или к настройкам Terminal.app по умолчанию, или к чему, но это «нажмите стрелку вниз при появлении нового запроса, чтобы просмотреть историю с того места, где вы ее использовали в прошлый раз "функциональность не включена по умолчанию.

Я просмотрел справочную страницу bash(1) и нашел:

       forward-search-history (C-s)

... но ^S , похоже, ничего не делал. Не уверен, что Терминал проглотил его как XOFF старой школы или что-то в этом роде (хотя, похоже, он не приостанавливал вывод терминала).

Несколько других заметок:

  • Я на Mac OS X Snow Leopard 10.6.6.
  • Я уже знаю о многих других забавных способах работы с историей оболочки, это всего лишь одна конкретная вещь, которую я пытаюсь заставить работать прямо сейчас.
  • Хотя любые указатели в правильном направлении были бы полезны, решения, о которых известно, что они работают на 10.6.x bash в Terminal.app, были бы очень полезными.

2 ответа2

1

^S делает противоположность ^R (после того, как вы сделали ^R). Возможно, вам придется выполнить stty -ixon чтобы отключить поведение XOFF .

Наиболее близким к тому, что вы ищете, является ^O (readline opera operate-and-get-next). Нажмите стрелку вверх, чтобы получить предыдущую команду, и нажмите ^O вместо Enter . Команда будет выполнена. Когда приглашение будет выдано снова, следующая команда в истории будет помещена в командную строку. Вы можете использовать стрелки, Enter или ^O в этой точке.

1

В зависимости от вашей версии stty вам может понадобиться stty flush undef. (В настоящее время страница руководства по OS X stty документирует "flush", но вывод stty -a по-прежнему отображает значение "discard".)

Используйте ^ o для выполнения команды из истории, когда вы думаете, что вам может понадобиться и следующая команда. Если вы хотите, просто повторите ^ o. Если вы не хотите этого, вы перемещаетесь в истории с этой точки с помощью ^ p, ^ n, ^ s и т.д. Или очищаете командную строку с помощью ^ u.

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