Linux

Найти и заменить в Vim / Vi

Найти и заменить в Vim / Vi

В этой статье описывается, как найти и заменить текст в Vim / Vi.

Vim - самый популярный текстовый редактор командной строки. Он предустановлен в macOS и большинстве дистрибутивов Linux. Найти и заменить текст в Vim быстро и легко.

Базовый поиск и замена #

В Vim вы можете найти и заменить текст с помощью :заменять (: s) команда.

Чтобы запускать команды в Vim, вы должны находиться в обычном режиме, режиме по умолчанию при запуске редактора. Чтобы вернуться в нормальный режим из любого другого режима, просто нажмите клавишу «Esc».

Общая форма команды замены следующая:

: [диапазон] s / шаблон / строка / [флаги] [количество] 

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

Если нет [диапазон] а также [считать] даны, заменяется только шаблон, найденный в текущей строке. Текущая строка - это строка, в которой находится курсор.

Например, чтобы найти первое вхождение строки 'foo' в текущей строке и заменить его на 'bar', вы должны использовать:

: s / foo / bar / 

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

: s / foo / bar / g 

Если вы хотите найти и заменить шаблон во всем файле, используйте символ процента % как диапазон. Этот символ указывает диапазон от первой до последней строки файла:

:% s / foo / bar / g 

Если нить часть опускается, она рассматривается как пустая строка, и соответствующий шаблон удаляется. Следующая команда удаляет все экземпляры строки 'foo' в текущей строке:

: s / foo // g 

Вместо символа косой черты (/), вы можете использовать любой другой не буквенно-цифровой однобайтный символ, кроме как разделителя. Этот параметр полезен, если в шаблоне поиска или в строке замены есть символ '/'.

: s | foo | bar | 

Для подтверждения каждой замены используйте c флаг:

: s / foo / bar / gc 
заменить на bar (y / n / a / q / l / ^ E / ^ Y)? 

Нажмите у заменить спичку или л заменить матч и выйти. Нажмите п пропустить матч и q или же Esc отказаться от подмены. В а опция заменяет совпадение и все оставшиеся вхождения совпадения. Чтобы прокрутить экран вниз, используйте CTRL + Y, и для прокрутки вверх используйте CTRL + E.

Вы также можете использовать регулярные выражения в качестве шаблона поиска. Приведенная ниже команда заменяет все строки, начинающиеся с 'foo' на 'Vim is the best':

:% s / ^ foo.* / Vim лучший / gc 

В ^ символ (каретка) соответствует началу строки и .* соответствует любому количеству любых символов.

Чувствительность к регистру #

По умолчанию операция поиска чувствительна к регистру; поиск «FOO» не будет соответствовать «Foo».

Чтобы игнорировать регистр в шаблоне поиска, используйте я флаг:

: s / Foo / bar / gi 

Другой способ принудительно игнорировать регистр - добавить \ c после шаблона поиска. Например, / Linux \ c выполняет поиск без учета регистра.

Если вы изменили регистр по умолчанию и хотите выполнять поиск с учетом регистра, используйте я флаг:

: s / foo / bar / gi 

Верхний регистр \ C после шаблона также принудительный поиск совпадений.

Диапазон поиска #

Если диапазон не указан, подстановочная команда работает только в текущей строке.

Диапазон может быть одной строкой или диапазоном между двумя строками. Спецификаторы строки разделяются знаком , или же ; символы. Диапазон можно указать с помощью абсолютного номера строки или специальных символов.

Например, чтобы заменить все вхождения 'foo' на 'bar' во всех строках, начиная со строки 3 по строку 10, вы должны использовать:

: 3,10 сек / фут / бар / г 

Диапазон является включительным, что означает, что первая и последняя строки включены в диапазон.

Точка . символ указывает текущую строку и $ - знак доллара в последней строке. Чтобы заменить 'foo' во всех строках, начиная с текущей строки до последней:

:.,$ s / foo / bar / 

Спецификатор строки также может быть установлен с помощью символа '+' или '-', за которым следует число, которое добавляется или вычитается из предыдущего номера строки. Если число после символа опущено, по умолчанию используется 1.

Например, чтобы заменить каждое 'foo' на 'bar', начиная с текущей строки и четырех следующих строк, введите:

:.,+4с / фу / бар / г 

Замена всего слова #

Команда замены ищет образец как строку, а не целое слово. Если, например, вы искали «gnu», поиск совпадет с тем, что «gnu» встроено в слова большего размера, такие как «cygnus» или «magnum».

Чтобы найти слово целиком, введите \< чтобы отметить начало слова, введите шаблон поиска, введите \> для обозначения конца слова:

Например, чтобы найти слово «foo», вы должны использовать \:

: s / \/бар/ 

История замены #

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

Примеры #

Строки комментариев (добавить # перед строкой) от 5 до 20:

: 5,20 с / ^ / # / 

Раскомментируйте строки с 5 по 20, отмените предыдущие изменения:

: 5,20 с / ^ # // 

Замените все экземпляры «яблоко», «апельсин» и «манго» на «фрукты»:

:% s / яблоко \ | апельсин \ | манго / фрукт / г 

Удалите завершающие пробелы в конце каждой строки:

:% s / \ s \ + $ // e 

Заключение #

Поиск и замена - это мощная функция Vim, которая позволяет быстро вносить изменения в текст.

Не стесняйтесь оставлять комментарии, если у вас есть вопросы.

SuperTuxKart для Linux
SuperTuxKart - отличная игра, созданная для того, чтобы бесплатно познакомить вас с Mario Kart в вашей системе Linux. Играть в нее довольно сложно и в...
Учебник Battle for Wesnoth
Битва за Веснот - одна из самых популярных стратегических игр с открытым исходным кодом, в которую вы можете играть сейчас. Эта игра не только очень д...
0 А.D. Руководство
Из множества существующих стратегических игр 0 A.D. удается выделиться как всеобъемлющее название и очень глубокая тактическая игра, несмотря на то, ч...