Допустим, у меня есть следующий очень простой файл
a
b
c
d
e
и я решил, что я хочу добавить пустые строки после каждой строки. Несколько разных методов сразу приходят мне на ум. Мы могли бы просто сделать это (и таким образом принять неудачу). Мы могли бы записать макрос qqo<ESC>jq
и повторить его несколько раз.
Два других метода казались мне более очевидными в то время.
Во-первых, я думал, что буду вводить :norm
команду o
в каждой строке. Итак, я бегу :%norm o
. Но в действительности мы получаем 5 пустых строк, за которыми следуют неразделенные строки, как указано выше. Я понимаю, что это означает, что %norm
vim на самом деле принимает сообщение о выдаче следующей обычной команды в первых пяти строках этого файла из пяти строк . Команда o
создает новую строку, а vim «тупой» в том смысле, что она ссылается по номеру строки, а не по какому-то другому идентификатору.
Ну, я был смущен. Конечно. Я попробовал несколько других вещей, чтобы увидеть, смогу ли я заставить вышеуказанный метод работать, но, увы, я не смог. Из любопытства я попробовал другой мой любимый метод массового применения. Это заставило меня попробовать :g/^/norm o
. К моему удивлению, это работает просто отлично! Так что, на мой взгляд, vim здесь не "тупой" так же, как выше, и ссылается на строки не просто на номер строки.
Что именно происходит?
:%s/$/\r/
или так::%s/\n/\r\r/
. Вывод заключается в том, что с символами новой строки можно сопоставить\n
, но они должны быть записаны как\r
значения замены