пошук vim, як у emacs


3

Чи є спосіб пошуку в vim, як в emacs?

Точніше, скажімо, я починаю пошук із включеним поступовим пошуком. Курсор перейде до першого поєдинку. Я натискаю Enter, а потім 'n', щоб перейти до наступного матчу. Тепер я хочу додати кілька символів до мого оригінального пошукового виразу та шукати наступний збіг. Я не можу цього зробити, тому що після натискання клавіші "Enter" фокус залишає область пошукового терміна.

Еквівалент emacs був би ctrl-s bla ctrl-s ha. І я б нарешті шукав термін "блаха".

Чи має це сенс? Це можливо?

Редагувати

Ідеальною ситуацією було б зробити щось на кшталт / blah <CS>, і дозволити йому негайно перейти до другого випадку "blah", зберігаючи фокус у пошуковому буфері.


Чому голосування проти?
ялівець-

Щодо теми уточнення пошуку, ви можете поглянути q/. Див. Для :h q/отримання додаткової інформації. Також є приємний Vimcast з цього приводу. vimcasts.org/episodes/…
Пітер Рінкер

Відповіді:


5

Найближче, про що я можу придумати, - би вдарити, /<C-R>/а потім додати новий текст. /відкриється діалогове вікно пошуку, <C-R>дозволяє вставити один із своїх регістрів, а /регістри - це попередній пошуковий буфер, який містить останній текст пошуку.

Якщо ви виявите, що ви робите це багато, ви можете зробити карту для цього, наприклад

nnoremap <leader>/ /<C-R>/

Як я вже згадував в іншому коментарі, якщо ви хочете залишитися в пошуковому буфері, ви можете додати щось подібне до свого vimrc. Я думаю, це отримає тобі те, що ти хочеш.

cnoremap <C-S> <CR>/<C-R>/

Я, напевно, дурний, але це не працює для мене.
ялівець

<C-R>тут означає управління + R одночасно. Якщо це не працює, я трохи здивований. Я думаю, що відповідь Тома все одно, мабуть, краща.
Алекс

Так. Я дурний. Я натиснув control-R, але не потрапив на '/' згодом. Солодкий трюк. Дякую!
ялівець-

Пропонована редакція не працює. Натискання CS під час пошуку в буфері не робить нічого.
ялівець-

1
<C-s>часто їдять терміналом.
romainl

8

/<Up>або /<C-P>ви перейдете до попереднього пошуку, і ви можете продовжити друкувати після цього додавання. Ви можете додати :nnoremap / /<Up>до свого vimrc, якщо хочете, щоб це було вашою поведінкою за замовчуванням.


Це спрацьовує, але це все-таки ще один натискання клавіші, ніж ідеал. Мені все ж доведеться натиснути "Enter" після введення початкового пошуку, а потім "/", щоб шукати знову :)
ялівцеве

Спробуйте додати cnoremap <C-S> <cr>/<up>до свого vimrc. Я думаю, що це зробить те, що ви просите.
Олексій

Зміна .vimrc не робить багато. Те саме з Алексом. Можливо, мій КС не визнаний таким. Або я не розміщую його в належному місці, навіть якщо це правильний пристріт між двома лініями nnoremap directiv.
ялівець-

Дякуємо за допомогу !! Працює з <CL>. Це був би чудовий час для функції подвійного прийняття: - / На жаль, ви втратили кидання монети.
ялівець

Ах, у вас може бути <CS> перезавантажена для збереження (скажімо, ви перебуваєте в Windows та використовуєте налаштування за замовчуванням). Ви можете перевірити свої відображення, виконавши:map <C-S>
dash-tom-bang
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.