сегодня я начал использовать vim. Я запутался в командах :g и :%s. Итак, в чем разница между командами :g или :%s?
В чем разница между: g и:% s командами в vim
Ответ 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 (включительно).
Ответ 2
Они разные.
:g может выполнять команды для сопоставленных строк. :s - одна из этих команд. То есть вы можете комбинировать :g and s
:%s просто выполняет поиск и замену на весь буфер, хотя он может также делать некоторые другие вещи с выражением, но это не так просто, как :g.
например:.
:g/foo/s/bar/blah/g
это будет делать подстановку bar->blah на строках, которые содержат foo. С :s мы могли бы:
:%s/foo/\=substitute(getline('.'), 'bar','blah','g')
поэтому :g проще.
Итак, если вы имеете дело с задачей подстановки, обычно :s должен появиться первым. Если вы хотите сделать что-то вроде для всех строк, которые соответствуют xxx, я хочу удалить /join/indent/....... :g, возможно, полезно для вас.