Есть ли способ (или определенная оболочка) для навигации по истории следующим образом: допустим, я написал следующую команду две недели назад:

scp ../../../file.txt ../../../...

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

6 ответов6

4

Для Ctrl-r (обратный поиск) каждый раз, когда вы нажимаете Ctrl-r вы возвращаетесь к следующему самому раннему совпадению в истории, так что это, вероятно, лучший вариант.

Однако есть и другие варианты, такие как ! оператор. Если последняя команда была уникальной (scp не выполнялась с тех пор), вы можете использовать !scp которая выполнит последнюю команду, начавшуюся с scp в вашей истории. Кроме того, если вы делаете history | grep scp подход, который вы можете использовать ! выполнить номер команды. Например:

$ history | egrep scp
 268  scp foo@bar:/home/foo/file .
$ !268

Это !268 выполнит команду 268 в точности так, как она отображается в выводе history без предшествующего числа.

3

Попробуйте Ctrl+r , он должен делать то, что вам нужно.

3

я использую

history | grep scp 

а затем скопируйте, вставьте и отредактируйте (если требуется) или просто ! <command number>

3

Попробуйте Ctrl+r для поиска в истории. Вы должны получить приглашение, подобное следующему:

(reverse-i-search)`':
2

я имею

"\e[B": history-search-forward
"\e[A": history-search-backward

в $ HOME/.inputrc, и я считаю, что это связывает желаемое поведение с клавишами со стрелками вверх и. Чтобы уточнить, man readline сообщает, что history-search- {forward, backward} будет учитывать текущую строку, набранную в командной строке:

   history-search-forward
          Search  forward  through  the history for the string of characters between the start of the current line
          and the current cursor position (the point).  This is a non-incremental search.
   history-search-backward
          Search backward through the history for the string of characters between the start of the  current  line
          and the point.  This is a non-incremental search.
0

Используйте навигацию vi :

set -o vi
[Esc]/scp[Enter]

Нажмите n чтобы перейти к следующему матчу, или N к предыдущему. i вставить текст, чтобы добавить

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