Конечно, вы больше не можете использовать Ctrl+ R. Если вы обратитесь к руководству Z Shell, то увидите, что history-incremental-search-backwardв emacsтаблице ключей есть только привязка клавиш для виджета . Для него нет привязок клавиш в сочетаниях клавиш vi.
Но, как вы также узнаете из прочтения руководства (это глава 18.), добавление привязки клавиш является довольно простым упражнением при использовании bindkeyкоманды:
bindkey "^R" history-incremental-search-backward
Вам даже не нужно использовать zleкоманду для отображения виджета на функцию оболочки, так как это стандартный виджет.
Если вы обратитесь к ответу на этот же вопрос, который есть в вики Z Shell , вы увидите команды для конкретного добавления этого в комбинации клавиш vi "command" и "insert mode":
bindkey -M viins '^R' history-incremental-search-backward
bindkey -M vicmd '^R' history-incremental-search-backward
Также обратите внимание, что, как указывает Гэрион , в таблице ключей «команда» vi /символ привязан к vi-history-search-backwardвиджету. Разница между этим виджетом и history-incremental-search-backwardвиджетом заключается в поведении виджета, которое применяется, если один находится в режиме поиска по истории. Вот пара различий, которые вы заметите:
- Переключение режимов vi:
- Режим поиска
history-incremental-search-backwardПереключение между mainи vicmdраскладок при вызове vi-cmd-modeвиджета пока все еще оставаясь в режиме поиска. т.е. из emacsрежима presssing на Escклавишах или Ctrl+ XCtrl+ Vклавиша переключает режим поиска между emacsи vicmdраскладками. (Вызов history-incremental-search-backwardиз vicmdраскладки клавиатуры, таким образом , хлопотно, если вы связываете что - то vi-cmd-modeв vicmdраскладке клавиатуры , а также.)
- Режим поиска в
vi-history-search-backwardобрабатывает vi-cmd-modeвиджет как accept-lineи завершает поиск, снова входя в командный режим, из которого вы ввели поиск. т.е. (с привязками по умолчанию) /переходит в режим поиска из командного режима и Escвозвращается в командный режим.
- Повторение поиска:
- В
history-incremental-search-backward, как history-incremental-search-backwardи vi-rev-repeat-searchвиджеты распознаются. т.е. (при условии, что вы изменили привязки, как указано выше) оба Ctrl+ Rи Nбудете искать предыдущую совпадающую строку.
- В
vi-history-search-backward, только vi-rev-repeat-searchвиджет распознается. т.е. (при условии, что вы изменили привязки, как указано выше) Ctrl+ Rвызовет звуковой сигнал и будет проигнорирован.
garyjohnпоказывает Vim способ сделать это иJdeBPпоказывает, как вернуть привязку клавиш для Ctrl + R! Я собираюсь поиграть с обоими методами и приму ответ позже. Я решу, основываясь на 1), какой метод мне кажется более легким, и 2) который получает больше голосов. Спасибо вам обоим!