Гид по технологиям

Поиск в Vim: приёмы, настройки и шпаргалка

7 min read Редакторы Обновлено 20 Nov 2025
Поиск в Vim: приёмы, настройки и шпаргалка
Поиск в Vim: приёмы, настройки и шпаргалка

Внимание: все примеры, команды и инструкции в этом материале проверены на Ubuntu 14.04 с Vim 7.4.

Введение

Vim — мощный текстовый редактор с огромным набором функций. Поиск текста и шаблонов занимает центральное место среди этих функций: он нужен при чтении кода, исправлении ошибок, рефакторинге и навигации по большим файлам. В этой статье мы рассмотрим не только базовые приёмы, но и полезные настройки, трюки, чек-листы для разных ролей и готовую шпаргалку команд.

Базовые операции поиска

Перед началом поиска выйдите из режима Insert в Normal Mode. Основные приёмы поиска:

  • /pattern — поиск вперед от текущей позиции вниз по файлу
  • ?pattern — поиск назад от текущей позиции вверх по файлу
  • n — перейти к следующему совпадению в направлении поиска
  • N — перейти к предыдущему совпадению
  • ggn — перейти к первому совпадению в файле
  • GN — перейти к последнему совпадению в файле

Пример. Чтобы найти слово linux, в Normal Mode наберите:

/linux

Нажмите Enter, и курсор окажется на первом найденном совпадении. Нажимайте n для перехода к следующему совпадению.

Если вы начали поиск с ?, то n будет двигаться по направлению назад, а N — вперед.

Настройка поиска

Подсветка совпадений

Чтобы визуально выделять все совпадения, включите подсветку:

:set hlsearch

Чтобы временно убрать подсветку найденного, выполните:

:nohlsearch

Игнорирование регистра

По умолчанию поиск регистрозависимый. Включите игнорирование регистра:

:set ignorecase

Можно временно переопределять поведение с помощью спецсимволов в строке поиска: добавляйте \C для чувствительности к регистру и \c для игнорирования регистра в конкретном запросе.

Умный регистр

Комбинация ignorecase + smartcase делает поиск регистронезависимым, если в запросе нет заглавных букв, и регистрозависимым, если есть хотя бы одна заглавная:

:set ignorecase
:set smartcase

Пример: поиск /LINUX найдёт только LINUX, а /linux найдёт LINUX и linux.

Инкрементальный поиск

Показывает совпадения в процессе набора запроса:

:set incsearch

Инкрементальный поиск полезен для быстрого визуального подбора шаблона.

Отключение цикличного поиска

По умолчанию поиск оборачивается по файлу. Отключите это поведение:

:set nowrapscan

Включить обратно:

:set wrapscan

Полезные трюки и приёмы

  • Поиск слова под курсором: нажмите * в Normal Mode. Это ищет слово под курсором вперед. Для поиска назад используйте #.
  • Частичный поиск под курсором: нажмите g (нажмите g, затем ), чтобы искать вхождения как части слова.
  • Вставить слово под курсором в командную строку поиска: введите /, затем Ctrl-r Ctrl-w. Это вставит слово под курсором для редактирования перед поиском.
  • Быстрое копирование найденных строк в список quickfix: используйте :vimgrep /pattern/ */.c или :vimgrep /pattern/ % для текущего файла, затем :copen.
  • Поиск и замена с подтверждением:
:%s/old/new/gc

Флаги: g — глобально в строке, c — спрашивать подтверждение для каждого совпадения.

  • Используйте \V в начале паттерна для very nomagic режима, если не хотите экранировать многие символы:
/\Va+b*c
  • Для регулярных поисков по множеству файлов полезны внешние инструменты в сочетании с Vim: grep, ag, rg, а затем :copen для результата.

Выделение совпадений в VIM

ALT: Скриншот подсветки совпадений поиска в Vim

Поиск без учёта регистра

ALT: Скриншот результата поиска с опцией ignorecase

Группированные результаты поиска

ALT: Скриншот группированных результатов поиска внизу окна Vim

Шпаргалка команд: кратко

  • /pattern — поиск вперед
  • ?pattern — поиск назад
  • n — следующее совпадение
  • N — предыдущее совпадение
    • — искать слово под курсором вперед
  • g* — частичный поиск под курсором
  • :set hlsearch — включить подсветку
  • :nohlsearch — выключить подсветку
  • :set ignorecase — игнорировать регистр
  • :set smartcase — умный регистр
  • :set incsearch — инкрементальный поиск
  • :set nowrapscan — отключить оборачивание
  • /\cpattern — поиск с игнорированием регистра для конкретного запроса
  • /\Cpattern — заставить чувствительность к регистру для конкретного запроса
  • :%s/old/new/gc — замена с подтверждением

Когда тактика поиска может не подойти

  • Большие двоичные файлы или минимально форматированные логи — встроенный поиск менее удобен: используйте внешние инструменты вроде ripgrep (rg) или grep для предварительной фильтрации.
  • Поиск сложных многострочных шаблонов — стандартный поиск Vim не работает с многострочными регулярными выражениями в одном простом /pattern. Для многострочных сопоставлений лучше применять :vimgrep с расширенными регулярными выражениями, внешние утилиты или плагины.
  • При работе с кодовой базой, где много совпадений в разных файлах, лучше комбинировать поиск по проекту и навигацию через quickfix или плагины типа fzf и ctags.

Альтернативные подходы

  • Внешние инструменты поиска: ripgrep (rg), the_silver_searcher (ag), grep. Преимущество — скорость и удобство поиска по проекту. Результат можно открыть в Vim через :copen или использовать плагины интеграции.
  • Плагины: fzf.vim, vim-grepper, ack.vim — дают более удобный интерфейс для поиска по проекту и перехода к совпадениям.
  • Использование ctags/ctags поддерживает семантическую навигацию по символам и функциям, а не только текстовый поиск.

Ментальные модели: как думать о поиске в Vim

  • «Поиск как указатель»: /pattern — это не только способ найти слово, но и быстрый способ переместить точку редактирования к месту, где вы хотите работать.
  • «Фильтрация перед редактированием»: сначала сузьте область поиска внешним инструментом, затем открывайте только релевантные файлы в Vim.
  • «Проверка перед заменой»: всегда используйте режим подтверждения (c) для замены в неочевидных или критичных местах.

Playbook: безопасный поиск и замена в проекте

  1. Найдите все совпадения по проекту через ripgrep:
rg --no-heading --line-number 'pattern' > matches.txt
  1. Просмотрите matches.txt и убедитесь, что паттерн соответствует ожидаемому контексту.
  2. В Vim запустите :vimgrep для результатов по файлам проекта:
:vimgrep /pattern/ **/*
:copen
  1. Откройте :copen и проходите совпадения, выполняя замены локально с :s или глобально с подтверждением :%s/old/new/gc.
  2. Выполните тесты проекта и откатите изменения, если что-то пошло не так.

Критерии приёмки

  • Все критические тесты проходят после замены
  • Нет незапланированных изменений в файлах с внешними зависимостями
  • Резервная ветка или коммит создан до массовой замены

Чек-листы для ролей

Разработчик:

  • Использовать :set hlsearch для визуальной проверки
  • Пробегать совпадения с n и N
  • Перед массовой заменой делать коммит или ветку

Системный администратор:

  • Для логов предпочесть внешние утилиты типа rg
  • При работе с конфигами делать резервную копию

Технический писатель:

  • Для правки терминологии искать оба регистра терминов или включать ignorecase
  • Использовать :%s/old/new/gc для точного контроля правок

Примеры и сценарии использования

  • Найти функцию foo в проекте и перейти к её определению:
:vimgrep /\v^\s*def\s+foo\b/ **/*.py
:copen
  • Заменить табы на 2 пробела в текущем файле:
:%s/\t/  /g
  • Быстро вставить слово под курсором в поиск и изменить его:
  1. Поставьте курсор на слово
  2. Нажмите /
  3. Нажмите Ctrl-r Ctrl-w
  4. Отредактируйте при необходимости, Enter

Частые ошибки и как их избежать

  • Ошибка: забыли выйти из Insert Mode и попытались ввести /. Решение: нажмите Esc.
  • Ошибка: провели замену без резервной копии. Решение: всегда коммитьте перед глобальными заменами.
  • Ошибка: не учли регистр. Решение: используйте smartcase или явные \c/\C.

Советы по производительности

  • Для очень больших проектов используйте ripgrep или ag и интегрируйте их с Vim через плагины.
  • Ограничивайте поиск по маске файлов, например */.js, чтобы не просматривать ненужные бинарники и зависимости.

Сопутствующие заметки по совместимости

Примеры в этой статье были проверены на Ubuntu 14.04 и Vim 7.4. В более новых версиях Vim и Neovim поведение большинства команд совпадает, но отдельные плагины и возможности могут отличаться. Если вы используете Neovim, плагины интеграции с внешними инструментами часто работают ещё быстрее.

Краткое резюме

  • Начните с базовых команд /, ?, n, N
  • Настройте :set hlsearch, ignorecase и smartcase для комфортной работы
  • Для массовой замены используйте подтверждение с флагом c и делайте резервные коммиты
  • Для поиска по проекту предпочитайте внешние инструменты и интеграцию через :vimgrep или плагины

Спасибо за чтение. Попробуйте включить одну опцию и потренировать её в реальных файлах. Если знаете другие полезные приёмы — поделитесь в комментариях.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как включить камеру на Mac
How-to

Как включить камеру на Mac

Устранение Fatal Application Exit в Resident Evil 7
Игры

Устранение Fatal Application Exit в Resident Evil 7

Уменьшение фонового шума микрофона
Аудио

Уменьшение фонового шума микрофона

Ускорение загрузок в Microsoft Store на Windows
Windows

Ускорение загрузок в Microsoft Store на Windows

YouTube Kids: настройка безопасности и родительский контроль
Родители

YouTube Kids: настройка безопасности и родительский контроль

Исправление chrome-error://chromewebdata/#
Разработка

Исправление chrome-error://chromewebdata/#