Як здійснити пошук зворотної історії в vi-режимі ZSH?


47

Я використовую vimпо суті всі мої потреби в редагуванні, тому я вирішив ще раз спробувати vi-mode для своєї оболонки (на даний момент ZSH w / oh-my-zsh в OS X), але я вважаю, що намагаюся (і не вдається) використовувати Ctrl-Rпостійно. Що еквівалентно прив'язує ключ? І для подальшого ознайомлення, як я б це зрозумів сам? Я майже впевнений, що міг би використати bind -Pбаш.


2
Відповідно до 'man zshzle', історія наростаючого пошуку-назад не обмежена у режимах Vi (vicmd, viins) за замовчуванням.
Павло

Відповіді:


56

Ви можете запустити bindkeyбез аргументів, щоб отримати список існуючих прив'язок, наприклад:

# Enter vi mode
chopper:~> bindkey -v

# Search for history key bindings
chopper:~> bindkey | fgrep history
"^[OA" up-line-or-history
"^[OB" down-line-or-history
"^[[A" up-line-or-history
"^[[B" down-line-or-history

У режимі emacs потрібна прив'язка history-incremental-search-backward, але вона не обмежена за замовчуванням у режимі vi. Щоб самостійно зв’язати Ctrl-R, ви можете запустити цю команду або додати її до свого ~/.zshrc:

bindkey "^R" history-incremental-search-backward

На zshzlemanpage ( man zshzle) міститься додаткова інформація про редактор рядків zsh, режими bindkey та emacs / vi.


3
Дякую, особливо за zshzle. Це досить інформативно і корисно.
Хенк Гей

Я тебе люблю. Серйозно. Після оновлення до OSX El Capitan зворотний пошук не було, і я пропустив його більше, ніж усе інше в своєму щоденному робочому процесі.
Крістіан

24

Це давнє запитання, але єдина (і прийнята) відповідь, в основному, говорить про те, як пересадити "схожий на emacs" history-incremental-search-backwardна режим vi. Незважаючи на те, що це цілком здійсненно і може бути правильним рішенням для вас, дивно, що ніхто не згадував "vi спосіб" історії пошуку.

Режим vi в zsh підтримує історію пошуку за допомогою стандартних клавіш vi / vim: /і ?, обидва доступні в командному режимі. (Натисніть, <Esc>щоб перейти з вставки в командний режим, як in vi чи vim.)

Однак їхнє значення зворотне: Оскільки ви, як правило, хочете шукати історію вашої оболонки в зворотному порядку, /здійснює зворотний пошук, тоді як ?здійснює пошук вперед.

Після відображення першого звернення ви можете (так само, як in vi / vim), nщоб продовжувати знаходити більше звернень у тому ж напрямку або Nповернути напрямок пошуку.

Відповідними вкладками vicmdклавіатурних файлів за замовчуванням є:

"/" vi-history-search-backward
"?" vi-history-search-forward
"n" vi-repeat-search
"N" vi-rev-repeat-search

2
Це також добре використовувати "^P" history-beginning-search-backwardі "^N" history-beginning-search-forwardдля автоматичного завершення, подібного до vim (ви починаєте вводити текст, потім натискати ctrl+pабо ctrl+n).
cprn

Для мене, ?виховання bck-i-search, саме це я шукав. Дякую.
geowa4

@wjv Перевага історії-поступово-пошуку-назад полягає в тому, що він підтримує глобальні зразки. За замовчуванням /або "?" doesnt: coderwall.com/p/-jvcag/zsh-reverse-history-search-with-regex
alpha_989

@ alpha_989 Повідомлення в блозі, на яке ви посилаєтесь, неправильне. Можливо, в автора встановлений якийсь zsh "фреймворк", який перевантажує ^Rв'язку клавіш. Єдиний символ, схожий на регулярні виразки, який підтримується обома, history-search-backwardі history-incremental-search-backwardце ^прив’язувати рядок пошуку до початку рядка. Справжня сила Росії history-incremental-search-backwardполягає в тому, що вона здійснює поступовий пошук, як випливає з назви. Я можу собі уявити, що vicmdз цієї причини, можливо, захочеться прив’язати його до ключової карти.
wjv

@wjv, ти маєш рацію .. Я повинен був писати history-incremental-pattern-search-backward, ні history-incremental-search-backward. history-incremental-pattern-search-backwardsможливо віджет .. але я думаю, він встановлений за замовчуванням у zsh. Він підтримує globшаблони не так, regexяк ви правильно вказали: zsh.sourceforge.net/Doc/Release/Expansion.html#Glob-Operators . У публікації справді є помилка ..
alpha_989
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.