Тази статия описва как да намерите и замените текст във Vim / Vi.
Vim е най-популярният текстов редактор в командния ред. Той се предлага предварително инсталиран на macOS и повечето дистрибуции на Linux. Намирането и подмяната на текст във Vim е бързо и лесно.
Основно търсене и заместване #
Във Vim можете да намерите и замените текст с помощта на : заместител
(:с
) команда.
За да стартирате команди във Vim, трябва да сте в нормален режим, режим по подразбиране при стартиране на редактора. За да се върнете в нормален режим от всеки друг режим, просто натиснете клавиша „Esc“.
Общата форма на заместващата команда е както следва:
: [диапазон] s / модел / низ / [флагове] [брой]
Командата претърсва всеки ред в [диапазон]
за модел
, и го заменя с a низ
. [броя]
е положително цяло число, което умножава командата.
Ако не [диапазон]
и [броя]
са дадени, само шаблонът, намерен в текущия ред, се заменя. Текущият ред е редът, където е поставен курсорът.
Например, за да търсите първата поява на низа „foo“ в текущия ред и да го замените с „bar“, бихте използвали:
: s / foo / bar /
За да замените всички повторения на шаблона за търсене в текущия ред, добавете ж
флаг:
: s / foo / bar / g
Ако искате да търсите и замените шаблона в целия файл, използвайте символа за процента %
като диапазон. Този знак показва диапазон от първия до последния ред на файла:
:% s / foo / bar / g
Ако низ
част е пропусната, тя се счита за празен низ и съответстващият модел се изтрива. Следващата команда изтрива всички екземпляри на низа 'foo' в текущия ред:
: s / foo // g
Вместо наклонената буква (/
), можете да използвате всеки друг буквено-цифров еднобайтов символ, освен като разделител. Тази опция е полезна, когато имате символа '/' в шаблона за търсене или заместващия низ.
: s | foo | бар |
За да потвърдите всяка подмяна, използвайте ° С
флаг:
: s / foo / bar / gc
заменете с лента (y / n / a / q / l / ^ E / ^ Y)?
Натиснете у
да замени мача или л
за да замени мача и да се откаже. Натиснете н
за да пропуснете мача и q
или Esc
да се откаже от заместването. The а
option замества мача и всички останали събития на мача. За да превъртите екрана надолу, използвайте CTRL + Y
, и за да превъртите нагоре, използвайте CTRL + E
.
Можете също да използвате регулярни изрази като шаблон за търсене. Командата по-долу заменя всички редове, започващи с „foo“ с „Vim е най-добрият“:
:% s / ^ foo.* / Vim е най-добрият / gc
The ^
(карета) символ съвпада с началото на ред и .*
съответства на произволен брой символи.
Чувствителност към регистъра
По подразбиране операцията за търсене е чувствителна към малки и големи букви; търсенето на „FOO“ няма да съответства на „Foo“.
За да игнорирате регистъра на шаблона за търсене, използвайте i
флаг:
: s / Foo / bar / gi
Друг начин за насилствено игнориране на случая е добавянето \° С
след модела на търсене. Например, / Linux \ c
извършва игнориране на случай на търсене.
Ако сте променили настройката на регистъра по подразбиране и искате да извършите търсене с чувствителност към малки и големи букви, използвайте Аз
флаг:
: s / foo / bar / gi
Главна буква \° С
след шаблона също принуждава търсене на съвпадение на букви.
Обхват на търсене #
Когато не е посочен диапазон, заместващата команда работи само в текущия ред.
Диапазонът може да бъде или един ред, или диапазон между два реда. Спецификаторите на редове са разделени с ,
или ;
знаци. Диапазонът може да бъде зададен с помощта на абсолютния номер на ред или специални символи.
Например, за да замените всички случаи на „foo“ на „bar“ във всички редове, започващи от ред 3 до ред 10, ще използвате:
: 3,10s / foo / bar / g
Обхватът е включителен, което означава, че първият и последният ред са включени в обхвата.
Точката .
символ показва текущия ред и $
- знакът долар последния ред. За да замените „foo“ във всички редове, започвайки от текущия ред до последния:
:.,$ s / foo / bar /
Спецификаторът на редове може да бъде зададен и с помощта на символа „+“ или „-“, последван от число, което се добавя или изважда от номера на предходния ред. Ако числото след символа е пропуснато, то по подразбиране е 1.
Например, за да замените всеки „foo“ с „bar“, започвайки от текущия ред и четирите следващи реда, напишете:
:.,+4s / foo / bar / g
Замяна на цяла дума #
Командата за заместване търси модела като низ, а не като цяла дума. Ако например търсите „gnu“, търсенето намира съвпадения, където „gnu“ е вградено в по-големи думи, като „cygnus“ или „magnum“.
За да търсите цяла дума, въведете \<
за да маркирате началото на дума, въведете шаблона за търсене, въведете \>
за маркиране на края на дума:
Например, за да търсите думата „foo“, която бихте използвали \
:
:с/\/ бар /
Заместваща история #
Vim следи всички команди, които изпълнявате в текущата сесия. За да прегледате историята на предишните заместващи команди, въведете :с
и използвайте клавишите със стрелки нагоре / надолу, за да намерите предишна заместваща операция. За да изпълните командата, просто натиснете Въведете
. Можете също да редактирате командата, преди да извършите операцията.
Примери #
Редове за коментар (добавяне #
преди реда) от 5 до 20:
: 5,20s / ^ / # /
Коментирайте редовете от 5 до 20, върнете предишните промени:
: 5,20s / ^ # //
Заменете всички случаи на „ябълка“, „портокал“ и „манго“ с „плодове“:
:% s / ябълка \ | портокал \ | манго / плодове / g
Премахнете последното празно пространство в края на всеки ред:
:% s / \ s \ + $ // д
Заключение №
Търсенето и подмяната е мощна функция на Vim, която ви позволява да правите промени в текста си бързо.
Чувствайте се свободни да оставите коментар, ако имате въпроси.