"Знайти далі" у Vim


535

Щоб шукати вперед у Vim для cake, я б набрав /cake, але курсор переходить до першого поєднання, коли натискаю кнопку return. Чи є команда Vim, аналогічна "знайти наступного"?


33
Звикайте до використання :help. :help /відображається допомога щодо пошуку, і відповідь на ваше запитання відображається лише трохи внизу сторінки.
Кріс Морган

Відповіді:


876

Це nдля наступного і Nдля попереднього.

І якщо ви використовуєте зворотний пошук за допомогою ?(наприклад, ?cake) замість /, це навпаки.

Якщо він встановлений у вашій системі, вам слід спробувати запустити vimtutorкоманду зі свого терміналу, який запустить підручник з основних команд Vim.

Роб Уеллс поради* і про #це також дуже доречний.


1
див. також плагін пошуку для індексу vim.org/scripts/script.php?script_id=1682
SergioAraujo

Чи є спосіб перейти до наступного матчу (не в поточному рядку)?
користувач13107

@ user13107: n і N працюють над усім буфером / файлом. Ви не обмежені поточним рядком.
Ксав'є Т.

@XavierT. будь-яка ідея, як я можу стрибати фіксовану кількість результатів у пошуку. Я маю на увазі, наприклад, стрибок на 10-ту відповідну лінію
GP Кіборг

@GPcyborg: nяк і більшість операторів vim, можна повторити номер, щоб повторити команду. Якщо ви введете текст, 10nвін перейде до 10-го результату (після початкового). Він також працює для всіх операторів руху, які 3jхочуть спускатися на 3 лінії.
Ксав’єр Т.

210

Найкорисніший ярлик у Vim, IMHO, є *ключовим.

Покладіть курсор на слово і натисніть *клавішу, і ви перейдете до наступного примірника цього слова.

#Ключ робить те ж саме, але він переходить до попереднього прикладу слова.

Це справді економія часу.


6
І якщо це не було очевидно, nі Nпереведіть вас вперед і назад через *сірники, як тільки ви натиснете *. (Або ви можете просто натискати, *щоб рухатись вперед або #назад, але використання цих клавіш, як правило, не є оптимальним.)
Герберт Сітц

3
@ Гербер, насправді n і N не сприймають вас "вперед" і "назад", відповідно. Як зазначав @Xavier вище, n - наступний, а N - попередній . Контроль пошуку вперед та назад здійснюється шляхом зазначення пошуку або клавішами '/' та '?' клавіші або за допомогою клавіші «*» та «#».
Роб Уеллс

Я не думаю, що * це корисно ... більшість часу я шукаю фрагмент слова (наприклад, частину назви функції). Я не хочу /Func, мати його взяти мене , SomeFuncа потім натисніть «*» , щоб перейти до наступного екземпляру , SomeFuncколи наступний екземпляр Funcзнаходиться в SomeOtherFunc.
weberc2

Ще гірше, що для C ++ я вважаю, що він не йде від виклику методу до реалізації методу, оскільки /\<foo\>не відповідає"className::foo()"
puk

84

Коли я починав, мені потрібно було переглянути демо .

Як шукати у Vim

  1. тип /
  2. введіть пошуковий термін, наприклад, "var"
  3. натиснути enter
  4. для наступного примірника натисніть n(для попереднього N )

2
Введення тексту *невірно. Тобто файл aa aaa. Пошук /aa, ви повинні відповідати. Після першого натискання клавіша *змінює пошуковий термін.
Бернхард

1
n не "наступний", а "повторити останній пошук". Отже, ввівши? Var почне шукати вгору з вашої поточної позиції "var". І "N" насправді "повторити останній пошук у зворотному напрямку", тому для цього прикладу, який би шукав "var" вниз від поточного положення.
Роб Веллс



13

Як обговорювалося, існує кілька способів пошуку:

/pattern
?pattern
* (and g*, which I sometimes use in macros)
# (and g#)

плюс, навігація по попередньому / наступному за допомогою Nта n.

Ви також можете відредагувати / відкликати історію пошуку, підтягуючи рядок пошуку /та обертаючись за допомогою C-p/ C-n. Ще кориснішим є те q/, що перенесе вас до вікна, де ви можете орієнтуватися в історії пошуку.

Також для розгляду є все важливе 'hlsearch'(тип :hlsдля включення). Це значно полегшує пошук декількох примірників вашого шаблону. Можливо, ви навіть хочете зробити свої матчі надзвичайно яскравими з чимось на зразок:

hi Search ctermfg=yellow ctermbg=red guifg=...

Але тоді ви можете зійти з розуму від постійних жовтих сірників по всьому екрану. Тому ви часто опиняєтесь :noh. Це настільки часто, що відображення в порядку:

nmap <leader>z :noh<CR>

Я легко запам’ятовую цю, як zз тих пір, коли я постійно вводив текст /zz<CR>(що є рідкісним явищем), щоб очистити своє виділення. Але :nohкартографування набагато краще.


2
Якщо ви відчуваєте натхнення q/, вам також слід пограти q:. Обидва справді зручні! (Але не дуже пов’язане з цим питанням.)
Міхей Елліотт

Спасибі, Міхе. Я вже знав про 'q:', хоча я не дуже його використовую. Але 'q /' був повністю пропущений у моїй шкільній освіті, і я думаю, що я отримаю багато користі.
Stabledog

2

Якщо ви натискаєте Ctrl+ Enterпісля натискання чогось типу "/ wordforsearch", ви можете знайти слово "wordforsearch" у поточному рядку. Потім натисніть nна наступний матч; натисніть Nдля попереднього матчу.


1
"Коли ми проводимо пошук, Vim сканує вперед з поточного положення курсору, зупиняючись на першому знайденому ним матчі", як вказує Практичний Вім.
басовий патрон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.