Основная информация
Vim не показывает последнюю новую строку в буфере, но фактически Vim всегда помещает EOL в конец файла, когда вы пишете его, потому что это стандарт для текстовых файлов в системах Unix. Вы можете найти больше информации об этом здесь . Одним словом вам не нужно беспокоиться об отсутствии новых строк в конце файла в vim.
Эксперимент 1
Вы можете сделать этот небольшой эксперимент, чтобы проверить это поведение. В терминале выполните:
$ vim test_test
Введите символ 1
и сохраните файл :wq.
У вас есть только один символ в файле, верно? На самом деле нет :) Теперь у вас есть в вашем файле 1
и LF
символы. Давайте проверим это с помощью утилиты hexdump:
$ hexdump test_test
0000000 31 0a
0000002
31
это ASCII-код для символа 1
и 0a
ASCII-код для непечатаемого LF
символа, который для UNIX, как вы, возможно, уже знаете код для конца строки.
Эксперимент 2
Но что, если мы откроем файл, у которого нет eol
символа в конце файла. Давай проверим это тоже. Давайте создадим файл без eol в конце, например, так:
$ echo -n "1" > test_without_eol
Тогда снова давайте посмотрим внутрь с помощью hexdump:
$ hexdump test_without_eol
000000 31
0000001
Так что здесь нет никаких eol
персонажей. Давайте откроем этот файл в vim:
$ vim test_without_eol
Внизу редактора вы увидите:
"test_without_eol" [noeol] 1L, 1C
И если вы сохраните этот файл, eol
персонаж будет вставлен автоматически.
Что мы можем сделать по этому поводу?
Если вам действительно нужно увидеть конец файла. Попробуйте использовать эту команду:
:set listchars=eol:$
он покажет все eol
символы в виде $
знака.
:set listchars=eol:$
Вим только опускает EOL , если файл открыт , как
'binary'
и'endofline'
параметр сбрасывается (если двоичный файл не имеет EOL при открытии, или вы явно отключить опцию). Другими словами, Vim только соблюдает отсутствующий EOL для двоичных файлов. Для текстовых файлов он всегда пишет с (добавленным) EOL. (Вот почему вам нужны такие решения, как мой плагин PreserveNoEOL для хранения текстовых файлов без EOL.) Все подробности можно найти по адресу:help 'endofline'
.Таким образом, вам нужно только открыть файл как недвоичный , чтобы Vim автоматически записывал EOL.
источник
Как упомянул Александр , Vim не показывает EOL на EOF, поэтому это так запутанно (особенно с пустой / пустой новой строкой, что является другой вещью), поэтому фактически записывает каждый раз при сохранении файла.
Вот простой тест, как проверить, работает ли это:
Обратите внимание на поведение командной строки при отсутствии EOL (оно смешивается со следующей строкой). При повторном сохранении файла с Vim, он добавляет его.
Используя
wc
мы можем считать строки, слова и символы перед сохранением и после, чтобы мы могли видеть, что это действительно изменяется.Почему это так важно? Чтобы наши файлы были совместимы с POSIX .
источник