Не добавлять новую строку в конце файла

11

Vim всегда добавляет новую строку в конце моих файлов при сохранении, и это вызывает ошибки в моих PHP-скриптах.

Как я могу заставить vim не добавлять эту новую строку при сохранении?

Дэн
источник
7
«это вызывает ошибки в моих PHP-скриптах» -> Это странно? PHP должен хорошо работать с завершающим переводом строки. На самом деле, это в значительной степени стандартно. Возможно, у вас есть пустая строка после того, ?>какой PHP выводит в браузер (вызывая ошибку «заголовки уже отправлены»)? Вам не нужен трейлинг ?>, и обычно рекомендуется его исключить, чтобы точно решить эту проблему.
Мартин Турной
Я думаю, это вводит в заблуждение. Наши скрипты интерпретируют любой вывод как ошибку.
Дан
1
Нет. Vim не добавляет новую строку.
romainl

Ответы:

11

Это не полная пустая строка, а последняя строка в конце последней строки. Инструменты Unix (как и наследие Vim) настаивают на добавлении этого, в то время как операционная система Windows не такая уж строгая. Вы можете прочитать больше об этом в Почему файлы должны заканчиваться символом новой строки?

К сожалению, довольно сложно предотвратить Vim от написания финального перевода строки. Мой плагин PreserveNoEOL может сделать это. Для обсуждения подходов также см. VIM Отключить автоматический перевод строки в конце файла .

Инго Каркат
источник
Просто отметим для будущих читателей, что, хотя этот ответ был потрясающим в то время, в более поздних версиях Vim есть гораздо более простое решение в ответе, опубликованном позже .
Рич
11

В новых версиях Vim наконец-то появилась возможность

Vim 7.4.785 добавляет опцию 'fixeol', которую можно отключить, чтобы автоматически сохранить любой отсутствующий EOL в конце файла.

(см. вики-страницу: http://vim.wikia.com/wiki/Do_not_auto-add_a_newline_at_EOF )

В вашей ~/.vimrcдобавить эту строку:

set nofixeol

Перезапустите vim, теперь он не должен добавлять символ новой строки в конец файла.

(работает только с версии vim 7.4.785)

DarthVanger
источник
0

Вы пытались открыть файл в двоичном режиме? Попробуй vim -b file_name. Не следует добавлять новую строку в конец файла.

Али
источник
Я попытался сделать это, а затем с помощью xxdпроверки, но он все еще добавляет linefeed ( 0a) даже в двоичном режиме.
Джеймс