Ответ 1
Что Vim "добавляет" в конец последней строки вашего файла, это символ "новой строки", который не следует путать с "новой строкой".
Символ "новой строки" или более точно символ "конец строки" (<EOL>
) означает "все, что приходит после того, как эта точка должна считаться находящейся в другой строке". С этой интерпретацией - <EOL>
- терминатор линии - последняя строка файла фактически является последней с <EOL>
.
Проблема в том, что большинство редакторов и IDE имеют другую интерпретацию - <EOL>
- разделитель строк - и, по логике, по умолчанию не добавлять <EOL>
в конец последней строки нового файла и, когда они сталкиваются с <EOL>
, добавляют лишнюю "новую строку" после текущей последней строки.
Короче говоря, Vim не добавляет "новую строку": другие редакторы интерпретируют (ошибочно) свою "новую строку" как "новую строку".
Но вы можете обойти эту проблему, выполнив следующие действия: прежде чем писать файл, сделайте :set binary noeol
, если вы хотите, чтобы он оставался "<EOL>
-бесплатным".
Однако :h 'binary'
может многое сказать о опасностях :set binary
, поэтому я бы сказал, что превращение его "on" все время звучит как плохая идея.
Чтобы проиллюстрировать различные типы поведения, это происходит, когда вы пытаетесь объединить два файла с помощью <EOL>
:
$ cat file1 $ cat file2 $ cat file1 file2
lorem ipsum Le tramway jaune lorem ipsum
dolor sit avance lentement dolor sit
amet dans le amet
Le tramway jaune
avance lentement
dans le
и это происходит, когда вы пытаетесь объединить два файла без <EOL>
:
$ cat file1 $ cat file2 $ cat file1 file2
lorem ipsum Le tramway jaune lorem ipsum
dolor sit avance lentement dolor sit
amet dans le ametLe tramway jaune
avance lentement
dans le
Первое поведение - это как-то ожидаемое поведение и причина, по которой Vim и многие (если не большинство) UNIX-y программ по умолчанию используют интерпретацию терминатора и добавляют символ <EOL>
в конце последней строки.
На следующем рисунке показан простой файл с <EOL>
, созданный с помощью nano
(он будет таким же с Vim) и будет открыт в Eclipse, TextMate, Sublime Text, Vim, XCode и TextEdit.
(изменить) В этом файле <строкa > нет строки 4, а единственным редактором группы, которая отображает файл, является Vim. Столбец с номером номера строки предназначен только для предоставления информации о буфере. Отображение 4 строк, где есть только 3, является грубой ошибкой. (EndEdit)
На этом рисунке показан еще один простой файл без <EOL>
, созданный с помощью Sublime Text и открытый в тех же редакторах /IDE.