Звичайно, ви більше не можете використовувати Ctrl+ R. Якщо ви ознайомтеся з посібником із Z Shell, то ви побачите, що history-incremental-search-backwardу emacsграфічній картці віджета є лише прив’язка ключа . У клавішах vi немає ключових прив’язок для цього.
Але як ви також знайдете, прочитавши посібник (це глава 18), додавання прив'язки ключів є досить простою вправою у використанні bindkeyкоманди:
bindkey "^R" history-incremental-search-backward
Вам навіть не потрібно використовувати zleкоманду для відображення віджета на функції оболонки, оскільки це стандартний віджет.
Якщо ви звернетесь до відповіді на це ж запитання, яке знаходиться у вікі Z Z Shell , ви побачите команди, які спеціально додають це до клавішів vi "команда" та "режим вставки":
bindkey -M viins '^R' history-incremental-search-backward
bindkey -M vicmd '^R' history-incremental-search-backward
Також зауважте, що, як вказує garyjohn , у клавіатурній карті vi "command", /символ прив'язується до 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) який отримує більше результатів. Дякую обом!