Vim: Как вы эффективно ищете текст?


30

Всякий раз, когда вы хотите найти текст в vim, вы должны набрать, /а затем строку, которую вы ищете.

Однако, если строка длинная и вы хотите сделать это несколько раз, есть ли способ сделать это, чтобы вам не приходилось печатать /andthisreallylongstringболее одного раза?


12
Я рекомендую вам кратко просмотреть листы Vim Cheat Sheet или Vim Tips - вы можете найти много других способов получить больше пользы от vim.
RedGrittyBrick

Подсказка: есть текстовые редакторы для Linux, которые не требуют недель изучения для использования.
BlueRaja - Дэнни Пфлюгофт

4
@BlueRaja: не уверен, что это хорошее место для войны редакторов. Также для войны ОС, поскольку есть также хорошие и удобные текстовые редакторы для Windows или Mac OS. Изучение того, как быть эффективным с редактором, в конечном итоге сделает вас, вероятно, более эффективным, чем придерживаться основных функций.
Бенуа

Ответы:


61

После завершения поиска нажмите «n», после чего будет повторено предыдущее действие (поиск).


12
Также Nперейдем к предыдущему результату.
Джин

15
Кроме того, /
нажатие

6
Также q/покажет редактируемое окно со всеми последними поисковыми запросами.
UncleZeiv

7
Кроме того, нажатие /и Enter повторит предыдущий поиск. Нажатие ?и Enter повторит предыдущий поиск в обратном направлении.
Энди Лестер

3
/Ctrl-Fальтернативой q/этому может быть более простая мнемоника (ctrl-f == find). Как и q, он также работает в командном режиме.
idbrii

34

Если искомая строка находится под курсором, вы можете ввести ее *для поиска вперед или #для поиска в обратном направлении.


19

Как я обычно ищу что-то вроде;

  1. Нажмите '/'
  2. Введите термин поиска
  3. нажмите Ввод
  4. Используйте 'n' и 'N', чтобы перемещаться вперед и назад в поиске.

Vim хранит историю ваших поисков, поэтому, если вам нужны предыдущие поиски, вы можете нажать '/' и использовать клавиши ВВЕРХ и ВНИЗ или <Ctrl-P> <Ctrl-N>, чтобы просмотреть историю поиска.

Вы также можете использовать «?» вместо «/» искать в обратном направлении.

Мне также нравится использовать:

set ignorecase smartcase

Теперь поиск будет выполняться только с учетом регистра, если в строке поиска есть заглавные буквы.


15

Два дополнительных советов , которые могут сделать ваш поиск более эффективны set hlsearchи set incsearch.

  • set hlsearchНу, подсвечивает ваши результаты поиска. Напечатайте, :nohчтобы отключить их, когда они вам больше не нужны.

  • set incsearch включает пошаговый поиск.

    Извлеченный из :help incsearch

    При вводе команды поиска покажите, где шаблон, как он был набран, соответствует. Соответствующая строка выделяется. Если шаблон неверен или не найден, ничего не отображается. Экран будет часто обновляться, это полезно только на быстрых терминалах.

    Без incsearch, ваши результаты будут отображаться только после нажатия <CR>на ключевое слово для поиска.

    Пример:

    Вы хотите найти wildignore

    введите описание изображения здесь

    Вы вводите, /wildи первое совпадение подсвечивается автоматически.

    введите описание изображения здесь

    Затем напечатайте iи переходите к следующему правильному совпадению.

    введите описание изображения здесь


13

Еще один совет, который еще не рассмотрен: нажав символы qи затем /, вы получите список ваших предыдущих поисковых терминов. Вы можете редактировать их, как любую другую строку в документе, а затем нажать клавишу ввода, чтобы повторно использовать их для нового поиска.


3
Искал это. Это важная заметка и очень по теме.
Синкоденада

8

После нажатия, /чтобы начать поиск, вы можете стрелку вверх, чтобы прокрутить историю поиска.

Вы можете ввести регулярное выражение, чтобы избежать необходимости вводить весь поисковый запрос: and.*longstring


7

Разве просто удар / без аргументов не работает для вас? Во всех наших системах это повторяет любой поиск, который был выполнен последним.


6

Есть хороший шаблон, который вы можете использовать для поиска дерганного текста . Тогда вам даже не нужно вводить слово само по себе, если вы перешли к нему другими способами, а не поиском. Таким образом, если вы находитесь на первом символе слова, которое вы хотите найти:

v
e
y
/
Ctrl-r
0
Enter

(затем переходите к следующему совпадению с n или N)

Однако *(или #) выполняет почти то же самое, что и все эти команды. Разница лишь в том, что вы можете быть гибкими в зависимости от того, сколько слова вы укажете (вместо e, до конца слова вы можете выбрать столько, сколько хотите, например, 9l)


1
  • /string - Поиск вперед для строки
  • ?string - Поиск по строке
  • n - Поиск следующего экземпляра строки
  • N - Поиск предыдущего экземпляра строки

1

Много времени при программировании я хочу искать aVeryLongVariableNameInTheProgram.

В vim вы можете очень легко скопировать текст в буфер / регистр, а затем найти его:

  • Наведите курсор на первый символ слова
  • "Bywвытащить текст aVeryLongVariableNameInTheProgramв буфер B (выберите ваш любимый, я использовал B)
  • /^RB (косая черта, Ctrl-R, B), чтобы вставить буфер B в строку поиска

Конечно, вы также можете вернуться к концу строки и т. Д. Вместо того, чтобы дергать одно слово - я просто использую приведенную выше последовательность все время.


1

Кроме того, вы можете вставить содержимое любого регистра в строку поиска, нажав Ctrl+, Rа затем имя регистра, например, / Ctrl+ R0 Enter.


Я думаю, что вы слово.
Dotancohen

0

Длинная строка, которую вы вводите имя переменной? Или длинная строка в вашем тексте? Затем нажмите, *чтобы найти слово / строку под вашим курсором.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.