Какая клавиша для смарт-поиска по истории с ZSH?

При использовании стрелок вверх и вниз в моем терминале (iTerm 2 на Mac OS Catalina) я могу просматривать свои последние команды с помощью стрелок вверх и вниз.

Я использую ZSH (точнее, Oh-my-zsh), и если я набираю, например. vim, затем нажмите вверх, он просмотрит мою историю для любых команд, выданных, начиная с vim.

Я думаю, что это раздражает, когда приходится перемещать руку на клавиши со стрелками, поэтому я хотел связать ctrl-j и ctrl-k для просмотра вверх и вниз.

Я посмотрел на bindkey и связал ^j с down-history и ^k с up-history. Это позволяет мне просматривать мою историю, но не с «умной» функциональностью (здесь я не уверен в правильной терминологии) — она просто перемещается вверх и вниз в моей истории, независимо от моего ввода.

Я просмотрел стандартные виджеты. в руководстве Zsh Line Editor, но я не могу найти для этого подходящую команду.

К какой команде я должен привязать ^j и ^k, чтобы получить желаемый результат?


person Fizk    schedule 12.06.2020    source источник
comment
Проверьте вывод bindkey | grep -F '^[[A'; это должно показать вам виджет, к которому в данный момент привязана стрелка вверх.   -  person chepner    schedule 13.06.2020
comment
На самом деле это было отличное предложение. Это вернуло мне up-line-or-history, поэтому, естественно, я привязал к этому ^p. К сожалению, я до сих пор получаю только то, что кажется up-history без умного поиска.   -  person Fizk    schedule 15.06.2020


Ответы (1)


Немного покопавшись, я оказался на странице редактора строк Z-Shell по адресу раздел под названием Поиск по префиксу.

Выяснилось, что нужный мне виджет называется history-beginning-search-backward. При использовании этого виджета он работает почти так, как я хотел, но не прыгает в конец строки.

Быстрый поиск привел меня к другому StackOverflow Вопрос, в котором говорится, что если вы хотите перейти в конец строки (как со стрелкой вверх), это нужно сделать следующим образом;

У меня был тот же вопрос, и мне удалось найти решение с некоторыми экспериментами.

Я добавил следующее в свой .inputrc

"\eOA": history-search-backward # Up

"\eOB": history-search-forward  # Down

"\C-P": "\eOA\C-E"              # Ctrl-P

"\C-N": "\eOB\C-E"              # Ctrl-N

Это связывает две горячие клавиши с Ctrl-P и Ctrl-N. Один для поиска по истории, а другой Ctrl-E для конца строки.

person Fizk    schedule 16.06.2020