Ответ 1
:g
выполняет команду для всех строк, которые соответствуют регулярному выражению:
:g/LinesThatMatchThisRegex/ExecuteThisCommand
Пример:
:g/hello/d
Это приведет к удалению (d
) всех строк, содержащих hello.
С другой стороны, :%s
просто выполняет поиск (по регулярному выражению) и заменяет его по всему файлу:
:%s/hello/world/g
(g
означает глобальный, поэтому он заменит все из них, а не только на одну строку, вы также можете использовать флаг c
(:%s/hello/world/gc
), если вы хотите подтвердить каждую замену вручную).
Это заменяет все вхождения hello
на world
.
Команды :g
и :%s
поддерживают регулярные выражения.
Команда s
означает substitute
, а символ %
- во всем буфере. Таким образом, %s
означает замену во всем буфере. Вы также можете задать диапазон строк:
:10,15s/hello/world/g
Это выполнит поиск и замену, замеченные ранее только в строках с 10 по 15 (включительно).