VIM поиск по тексту и замена
Великая точка g: как искать текстовые вхождения и делать замену, волшебный оператор поиска.
Для поиска в VIM по тексту есть несколько способов.
Сделаю сразу несколько замечаний:
- для подсветки при поиске желательно включить подсветку вхождений текста
set hlsearch incsearch
- по умолчанию поиск регистрозависимый
set ignorecase smartcase
Это всё желательно прописать в vimrc или init.vim (если пользуетесь neovim).
Обычный поиск по тексту
Первый и частоиспользуемый способ поиска в тексте это слеш (/
).
Пример: /пример
.
Поиск с выполнением команд
Поиск с заменой текста или выполнением других команд начинается с двоеточия (:
).
После двоеточия идёт указание диапазона применимости команды. Это может быть:
%
- применение ко всему документу$
- применение к концу файла15:32
- применение к диапазону строк с 15-ой по 32-ю.
- применение к текущей строке (можно опустить)
Далее идёт команда, например s
- сокр. substitute. Затем её параметры, например слеши для разделения искомого от заменяемого.
Так же вместо слешей-разделителей можно использовать другие символы, см. Alternate delimiters for the replace command
В конце разделителей для замены могут быть использованы следующие модификаторы:
g
- поиск и заменаа других вхождений в диапазонеi
- не учитывать регистр, т.е. на /text/ сматчитсяtext
иtExT
c
- перед каждой заменой будет спрашивать, заменить или нет + другие варианты =)
Полный пример: :15:$s/зачем/затем/gic
.
Более подробно про регулярки VIM можно поизучать например тут: http://vimregex.com/ или :h [regexp](regexp)
.
Поиск с заменой
Примеры:
Замена первого вхождения текста в текущей строке (точка .
опущена, можно было написать :.s/текст/новый текст/
): :s/текст/новый текст/
.
Для поиска и замены ПОЛНОГО вхождения текста используются операторы <
и >
: :s/\<текст\>/новый текст/
.
Различие в том, что первый вариант заменит этоттекствот
на этотновый текствот
. Тогда как второй найдёт только слово (слова) “текст” и заменит.
Та самая точка G
Часто встречается задача найти и удалить строки текста по какому-нибудь критерию.
Наипростейшее решение для строк включающих символ решётки: :g/#/d
.
Каждая строка (g
- global), содержащая решётку, будет удалена (d
- сокр. delete).
Подобное я испоьзую для удаления комментариев в json: :g#//#d
Ещё забавный пример для изменения порядка строк на обратный: :g/^/m0
.
Здесь для каждой строки у которой есть начало выполняем команду move
на первую (нулевую) строку.
Так как команда выполняется для каждой строки текста начиная с первой, перемещение каждой последующей строки включая последнюю будет происходить на первую строку и порядок строк поменяется.
Если решили перейти с какой-либо IDE на VIM, скорее всего заинтересует:
- Переход с PHPStorm или Intellij IDEA на VIM
- Оптимизация и ускорение редактора VIM
- Статусная строка VIM без плагинов в 5 строк
А вообще, чаще смотрите в справку VIM: :h :
, :h substitute
например.
Поблагодарить через СберБанк:
4274320107381801
Остались вопросы или есть пожелания, замечания — пишите в комментарии: