Я использую zsh и, поскольку я заядлый пользователь Vim, я просто переключился на использование редактирования в стиле Vim в командной строке. (Это означает, что если я наберу ls foo/bar
и решу, что хочу cd
вместо этого, я могу нажать, Esc ^
чтобы вернуться к началу и cw cd
перейти ls
к cd
.
Это все здорово, но проблема в том, что я больше не могу использовать Ctrl+R
рекурсивный поиск по истории. Есть ли другой способ сделать это, или я могу как-то переопределить привязку клавиш Vim, чтобы вернуть его?
garyjohn
показывает Vim способ сделать это иJdeBP
показывает, как вернуть привязку клавиш для Ctrl + R! Я собираюсь поиграть с обоими методами и приму ответ позже. Я решу, основываясь на 1), какой метод мне кажется более легким, и 2) который получает больше голосов. Спасибо вам обоим!Ответы:
Конечно, вы больше не можете использовать Ctrl+ R. Если вы обратитесь к руководству Z Shell, то увидите, что
history-incremental-search-backward
вemacs
таблице ключей есть только привязка клавиш для виджета . Для него нет привязок клавиш в сочетаниях клавиш vi.Но, как вы также узнаете из прочтения руководства (это глава 18.), добавление привязки клавиш является довольно простым упражнением при использовании
bindkey
команды:Вам даже не нужно использовать
zle
команду для отображения виджета на функцию оболочки, так как это стандартный виджет.Если вы обратитесь к ответу на этот же вопрос, который есть в вики Z Shell , вы увидите команды для конкретного добавления этого в комбинации клавиш vi "command" и "insert mode":
Также обратите внимание, что, как указывает Гэрион , в таблице ключей «команда» vi /символ привязан к
vi-history-search-backward
виджету. Разница между этим виджетом иhistory-incremental-search-backward
виджетом заключается в поведении виджета, которое применяется, если один находится в режиме поиска по истории. Вот пара различий, которые вы заметите: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вызовет звуковой сигнал и будет проигнорирован.источник
В bash-режиме vi ввод текста
<Esc>/<string><Enter>
будет искать историю команд<string>
.n
будем искать дальше назад в истории;N
будет искать вперед. zshell может быть таким же.источник
Я предпочитаю использовать:
Таким образом, я могу набрать
ESC /text
и увидеть командную строку. Если я хочу пойти на следующий матч, я печатаюESC n
источник