Как я могу вспомнить пронумерованную команду истории для редактирования?

17

Я часто ищу изменения с history | grep 'string'

Я получаю список команд в моей истории вместе с номером строки истории), например

history | grep 'git'

  755  git status
 1535  git push origin master
 1570  git merge origin/one-146
 1667  git reset --hard origin/master

Теперь я могу вспомнить и выполнить команду за один раз !nnn, например:

!755
git status
# On branch master
nothing to commit, working directory clean

У меня такой вопрос: как я могу вспомнить пронумерованную команду истории и остаться в командной строке для редактирования, а не выполнить ее сразу же «как есть», как это !происходит, чтобы я мог изменить несколько вещей, например, до возврата?

Майкл Даррант
источник

Ответы:

12

С тех пор я принял другой подход к этому - использование ![line-number]:p

Это печатает оператор и добавляет его в историю, но фактически не выполняет его. Затем я делаю стрелку вверх и меняю ее по желанию.

Я комбинирую это с моим hgпсевдонимом ( alias hg='history | grep ') для вызова команд истории на основе некоторого текста.

Пример:

$ hg checkout

17140   git checkout README.rdoc
17143   git checkout master
17201   git checkout README.rdoc
17204   git checkout master
17923   git checkout .bashrc
18151   git checkout v311

Я использую это в дополнение к ctrl - r(обратный поиск в истории), потому что иногда я предпочитаю видеть немедленный список всех возможностей для данной строки, а не только вывод в 1 строке, который ctrl- rпоказывает. После того, как hg [string]я сделал бы, ![line-number]search_stringкак hg checkoutпоказано выше.

Майкл Даррант
источник
8

Если вы установите histverify опцию , например,

shopt -s histverify

тогда все подстановки истории выводятся на редактирование, а не выполняются немедленно. Затем вам нужно будет нажать Enterдважды вместо ввода после !755выполнения команды.

Вы можете вставить произвольный текст в список истории с помощью history -s. Объедините это сfc -nl к списку конкретных записей истории.

history -s "$(fc -nl 755 755)"

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

Жиль "ТАК - прекрати быть злым"
источник
6

Вы можете искать в истории, используя Ctrl + R. Если запись истории длинная, используйте мышь (а не клавиатуру, которая останавливает поиск), чтобы скопировать и вставить часть команды для редактирования обратно.

Как прокомментировал @rijsg, вы можете использовать стрелки (влево и вправо) или эквивалентные клавиши, чтобы остановить поиск и начать редактирование.

Zelda
источник
2
Любая клавиша со стрелкой или эквивалентная команда ( Ctrl-aнапример) остановит поиск, оставив текущую запись истории в командной строке, не выполняя ее. Этого может быть или не быть достаточно, в зависимости от того, что хочет @Michael.
njsg
2

Если вы сконфигурируете свой файл .bashrc для использования редактора vi в командной строке, это сделает редактирование командной строки намного менее сложным.

Первый, когда «набор -o VI» включена, то вы можете просто нажать «<Esc> к» , а затем продолжайте нажимать «K» , чтобы идти вверх файл истории , как это было, если вы идете мимо входа, использования «J» идти вниз .

ПРИМЕЧАНИЕ: при использовании vi существует два режима: команда и редактирование, чтобы войти в командный режим, нажмите ESCAPE KEY ONCE, затем a, A, i, I и т. Д., Чтобы вставить.

Простая панель курсоров в vi: left = h, down = j, up = k, right = l http://linuxmeister.net/vi/vi-Summary.jpg

Я добавил все записи, необходимые для этой работы: http://linuxmeister.net/Notes/bashrc-simple.html

Итак, основываясь на очень полезной информации выше, я смог использовать «историю» и ВЫЗВАТЬ строку из «истории», БЕЗ ее выполнения. (СПАСИБО ЗА ЭТО ПОСТ!)

Если Shopt указан в списке, и его история отключена! выполнит немедленно,

если вы добавили в свой .bashrc или набрали: shopt -s histverify , то a! позволяет редактировать, например:

history
    1  more .bashrc
    2  history
    3  shopt
    4  . ./.bashrc
    5  shopt | grep hist
    6  history
    7  alias
    8  history
    9  shopt
   10  history

->! 5

когда я нажимаю! 5 появляется следующая команда, но она НЕ выполняется

### если значение «включен».

shopt | grep hist
cmdhist         on
histappend      on
histreedit      off
histverify      on
lithist         off

Помните, что Линус и Ричард создали инструменты Linux и GNU для использования преимуществ UNIX. Редактор vi (созданный Биллом Джой) является одним из лучших инструментов для освоения, так как он используется для КАЖДОГО дистрибутива UNIX и Linux.

Все остальные редакторы командной строки должны быть загружены и требуют дополнительного программного обеспечения. Использование графического интерфейса в Linux (кроме Firefox, Thunderbird и OpenOffice) похоже на буксировку вашего Diesel 4x4 с VW Beetle 1968 года ... это будет работать, но это не имеет никакого смысла.

Помните, что Керниган говорил о графическом интерфейсе: «то, что вы видите, это все, что вы получаете».

LinuxMeister
источник
-1
echo !number

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

Andrzej
источник