Как искать в Vim / Vi
В этой статье описывается, как выполнять поисковые операции в Vim / Vi.
Vim или его предшественник Vi предустановлен в macOS и большинстве дистрибутивов Linux. Поиск текста — одна из самых распространенных задач при работе с файлами. Знание основ Vim может быть очень полезным, когда вы сталкиваетесь с ситуацией, когда ваш любимый редактор недоступен.
Базовый поиск
Для поиска в Vim вы должны быть в обычном режиме. Когда вы запускаете редактор Vim, вы находитесь в этом режиме. Чтобы вернуться в нормальный режим из любого другого режима, просто нажмите клавишу Esc.
Важно отметить, что команда поиска ищет шаблон как строку, а не целое слово. Если, например, вы искали «gnu», поиск совпадет с тем, что «gnu» встроено в слова большего размера, такие как «cygnus» или «magnum».
Нажмите n для поиска следующего вхождения или N в верхнем регистре для поиска в обратном направлении.
Основные шаги для выполнения поиска в Vim следующие:
Искать слово целиком
Например, для поиска «gnu» вы должны использовать / :
Искать в текущем слове
История поиска
Чувствительность к регистру
По умолчанию в результатах поиска учитывается регистр; поиск «GNU» не будет соответствовать «Gnu».
Чтобы игнорировать регистр :set ignorecase или :set ic в командной строке Vim. Вы также можете установить регистр игнорирования как вариант по умолчанию, добавив команду в ваш файл
Другой способ принудительно игнорировать регистр — добавить c после шаблона поиска. Например, /Linuxc выполняет поиск без учета регистра. Верхний регистр C после шаблона приводит к поиску совпадения по регистру.
Выводы
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Как выполнять поиск без учета регистра в Vim
Я хочу найти в файле слово в верхнем регистре, например COPYRIGHT. Я пробовал выполнить такой поиск:
Но это не работает. Я знаю, что в Perl, если я передаю флаг i в регулярное выражение, он превратит регулярное выражение в регулярное выражение без учета регистра. Похоже, что у Vim есть свой способ указать регулярное выражение без учета регистра.
15 ответов
Вы можете использовать escape-последовательность \c в любом месте шаблона. Например:
/\ccopyright или /copyright\c или даже /copyri\cght
Чтобы сделать обратное (соответствие с чувствительным регистром), используйте вместо этого \C (заглавная C).
Вы можете установить опцию ic в Vim перед поиском:
Чтобы вернуться к поиску с учетом регистра, используйте:
Вы можете подать команду
И после этого ваш поиск будет нечувствительным к регистру.
nmap :set ignorecase! ignorecase?
Вы можете использовать в своем vimrc следующие команды:
Недавно я написал статью о командах поиска Vim (как встроенных командах, так и лучших плагинах для поиска эффективно).
Как предлагали другие:
Но самое интересное в том, что вы можете переключать такие режимы с помощью:
Поместите эту команду в свой файл vimrc
Всегда выполнять поиск без учета регистра
Я предпочитаю использовать \c в конце строки поиска:
Как упоминает @huyz, иногда желаемое поведение заключается в использовании поиска без учета регистра, но при замене с учетом регистра. Мое решение для этого:
У Vim есть 2 режима
1. режим редактирования
Поиск будет работать в обычном режиме
/ \ c для чувствительного к регистру
/\cпоиск
Вы можете установить ignorecase по умолчанию, запустите это в оболочке
Некоторая важная информация, если вы хотите узнать больше о командах vim, как указано ниже, вы можете попробовать следующие шаги:
Я очень надеюсь, что предоставленная информация будет кому-то полезна.
Найти и заменить в Vim / Vi
В этой статье описывается, как найти и заменить текст в Vim / Vi.
Vim — самый популярный текстовый редактор командной строки. Он предустановлен в macOS и большинстве дистрибутивов Linux. Найти и заменить текст в Vim быстро и легко.
Базовый поиск и замена
В Vim вы можете найти и заменить текст с помощью команды :substitute ( :s ).
Чтобы запускать команды в Vim, вы должны находиться в обычном режиме, который используется по умолчанию при запуске редактора. Чтобы вернуться в обычный режим из любого другого режима, просто нажмите клавишу «Esc».
Общая форма команды замены следующая:
Команда ищет в каждой строке в [range]
Например, чтобы найти первое вхождение строки ‘foo’ в текущей строке и заменить его на ‘bar’, вы должны использовать:
Чтобы заменить все вхождения шаблона поиска в текущей строке, добавьте флаг g
Если вы хотите найти и заменить шаблон во всем файле, используйте процентный символ % в качестве диапазона. Этот символ указывает диапазон от первой до последней строки файла:
Если часть
Вместо символа косой черты ( / ) можно использовать любой другой однобайтный символ, кроме буквенно-цифрового, кроме разделителя. Этот параметр полезен, если в шаблоне поиска или в строке замены есть символ «/».
Для подтверждения каждой замены используйте флаг c
Вы также можете использовать регулярные выражения в качестве шаблона поиска. Приведенная ниже команда заменяет все строки, начинающиеся с ‘foo’ на ‘Vim is the best’:
Чувствительность к регистру
По умолчанию операция поиска чувствительна к регистру; поиск «FOO» не будет соответствовать «Foo».
Чтобы игнорировать регистр для шаблона поиска, используйте флаг i
Другой способ принудительно игнорировать регистр — добавить c после шаблона поиска. Например, /Linuxc выполняет поиск без учета регистра.
Если вы изменили настройку регистра по умолчанию и хотите выполнять поиск с учетом регистра, используйте флаг I
Верхний регистр C после шаблона также приводит к поиску совпадения по регистру.
Диапазон поиска
Если диапазон не указан, подстановочная команда работает только в текущей строке.
Например, чтобы заменить все вхождения ‘foo’ на ‘bar’ во всех строках, начиная со строки 3 по строку 10, вы должны использовать:
Диапазон является включительным, что означает, что первая и последняя строки включены в диапазон.
Спецификатор строки также может быть установлен с помощью символа «+» или «-», за которым следует число, которое добавляется или вычитается из номера предыдущей строки. Если число после символа опущено, по умолчанию используется 1.
Например, чтобы заменить каждое ‘foo’ на ‘bar’, начиная с текущей строки и четырех следующих строк, введите:
Замена всего слова
Команда замены ищет образец как строку, а не целое слово. Если, например, вы искали «gnu», поиск совпадет с тем, что «gnu» встроено в слова большего размера, такие как «cygnus» или «magnum».
Для поиска всего слова введите чтобы отметить начало слова, введите шаблон поиска, введите > чтобы отметить конец слова:
Например, для поиска слова «foo» вы должны использовать :
История замены
Примеры
Строки комментариев (добавьте # перед строкой) от 5 до 20:
Раскомментируйте строки с 5 по 20, отмените предыдущие изменения:
Замените все экземпляры «яблоко», «апельсин» и «манго» на «фрукты»:
Удалите завершающие пробелы в конце каждой строки:
Вывод
Поиск и замена — это мощная функция Vim, которая позволяет быстро вносить изменения в текст.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Как выполнить поиск без учета регистра в Vim
Я хотел бы найти слово в верхнем регистре, например, COPYRIGHT в файле. Я попытался выполнить поиск как:
но это не работает Я знаю, что в Perl, если я передам i флаг в регулярное выражение, оно превратит регулярное выражение в регистр без учета регистра. Кажется, что у Vim есть свой собственный способ указать регистронезависимое регулярное выражение.
Вы можете использовать \c escape-последовательность в любом месте шаблона. Например:
/\ccopyright или /copyright\c или даже /copyri\cght
Чтобы сделать обратное ( сопоставление с учетом регистра ), используйте \C вместо него (заглавная C).
А также предложения для \c и ignorecase я считаю smartcase очень полезным. Если вы ищете что-то, содержащее заглавные буквы, поиск будет выполняться с учетом регистра; если вы ищете что-то чисто строчные, он будет выполнять поиск без учета регистра. Вы можете использовать \c и \C переопределить это:
Вы можете установить ic опцию в Vim перед поиском:
Чтобы вернуться к поиску с учетом регистра, используйте:
ic это сокращение для ignorecase
Вы можете выполнить команду
и после этого ваши поиски будут без учета регистра.
nmap :set ignorecase! ignorecase?
Вы можете использовать в vimrc этих командах:
Вам нужно установить, ignorecase если вы хотите использовать то, что smartcase обеспечивает.
Недавно я написал статью о командах поиска Vim (как встроенных в команду, так и лучшие плагины для эффективного поиска).
? Как выполнить поиск в Vim/Vi
vi (visual editor) – лучший редактор текстовых файлов командной строки для Unix-подобных операционных систем.
Vim – это улучшенная версия текстового редактора vi, используемого в современных системах.
Это текстовый редактор с широкими возможностями настройки.
Это руководство поможет вам найти текст, строку или шаблон в текстовом редакторе Vi (m).
Как искать в редакторе Vi (m)
Чтобы начать поиск в редакторе Vi (m), сначала нажмите клавишу ESC, чтобы переключиться в командный режим в редакторе.
Затем нажмите «/», а затем введите текст, который нужно найти.
Поиск без учета регистра в Vim
По умолчанию vim ищет совпадения с учетом регистра.
Чтобы искать шаблон во всех случаях, вам нужно отключить регистр с помощью команды set в vim.
Введите следующую команду в vim, чтобы отключить поиск с учетом регистра.
Затем снова выполните поиск некоторого текста, вы обнаружите, что выбор поиска игнорирует регистр.
Вы можете отменить указанные выше изменения, используя noignorecase с командой set.
Поиск по одному слову
Просмотр истории поиска
Vim хранит всю историю поиска, выполненного в текущем сеансе.
Чтобы просмотреть предыдущие поиски, нажмите / и используйте клавиши вверх и вниз