Оба препарата @Amadan и @Explosion Pills являются правильными, но я думаю, вам действительно нужно объяснение того, «как думает vim» о том, что вы редактируете.
Во-первых, vim основан на vi, который был интерфейсом для ex-редактора. Несмотря на то, что vim прошел долгий путь, он по-прежнему является линейным редактором . Не ищите волшебного персонажа в конце линии, потому что его нет! (Когда я говорю, что ВИМ проделал долгий путь, я помню, когда была добавлена опция 'whichwrap'
.)
Мы обычно не потрудились сделать различие, но файл на жестком диске отличается от буфер, который вы редактируете в vim (:help buffers
). Файл представляет собой последовательность символов (или байтов). Когда vim читает файл, он разбивает их на строки в зависимости от опции 'fileformat'
(короткая форма 'ff'
). Поскольку вы работаете с окнами, по умолчанию 'ff'=dos
, что означает, что 0d0a
(a.k.a. CRLF или \r\n
) в файле используется для разделения строк. У меня есть 'ff'=unix
, поэтому я вижу только 0a
, когда фильтрую через xxd
. (До OS X, Mac использовался 0d
, поэтому было три стандарта!)
Хорошо, что волшебного символа EOL просто нет, потому что это делает vim портативным между системами. Являясь линейным редактором, vim позволяет делать всевозможные вещи, такие как поиск первого совпадения шаблонов на каждой строке и что-то делать с ним. Это не всегда то, что вы хотите, поэтому некоторые люди привыкли добавлять /g
в конце каждой команды :s
или даже устанавливать 'gdefault'
.
Возвращаясь к исходному вопросу, удаление строки из буфера очень отличается от удаления всех символов в строке. Команды Ex (помните о линии) действуют в строках, а :d
- это команда для ее удаления. Команда :s
изменит линию; не следует путать общее использование :%s
, которое вызывает :s
на каждой строке в буфере (:help :range
).
why ':% s/^ $ \ n // g' сделать tasd успешно? –
@it_is_a_literature, потому что символ '\ n' является совпадающим символом, который заменяется. Google "утверждение нулевой ширины". –
Почему:% s/^ $ \ r \ n // g не может работать? –