Vim нет конца строки в последней строке или eof - PullRequest
25 голосов
/ 09 ноября 2010

Я пытаюсь настроить vim, чтобы пропустить добавление eol в последнюю строку или eof, я пробовал это

:set binary
:set noeol
:w

, что не идеально, поскольку двоичный тип файла переопределен для последующего использования.

Любая другая опция, чтобы установить это, мне не нужен перевод строки в последней строке.

Ответы [ 4 ]

15 голосов
/ 08 января 2011

Я хотел бы добавить ответ, который, я думаю, может быть столь же полезным. Выбранный ответ всегда удаляет EOL для файлов, даже если они были с самого начала. Это может быть поведение, которое вы хотите, оно также может не быть. По моему мнению, я хочу сохранить EOL, как я первоначально открыл файл.

Я предлагаю небольшую модификацию. Поместите set binary вверху вашего .vimrc файла. Таким образом, любые файлы будут открываться в двоичном режиме. Если у них нет EOL, тогда vim обнаружит это и оставит это как NOEOL. Если у них есть EOL, он распознает его как EOL и оставит его.

Если вы хотите, чтобы новые файлы также не имели EOL, вам следует установить

au BufNewFile * set noeol

Команды для этого парня будут такими, если вы всегда хотите NOEOL когда-либо . Следует помнить одну вещь: если у вас есть файл с пробелами внизу, в конце вы потеряете пробелы. Это потому, что происходит следующее,

  1. VIM читает файл и видит новую строку в конце и думает, хорошо, это файл с новой строкой (независимо от того, в двоичном режиме или нет).
  2. Когда вы затем пишете файл, он выполняет autocmd,
    1. установить двоичный режим
    2. set noeol (удаляет EOL, который VIM думал, что заканчивает файл, и удаляет его.
    3. файл сохраняется
  3. Теперь у вас есть файл, в котором на один EOL меньше.

Этот процесс будет повторяться до тех пор, пока не исчезнут EOL и файл не завершится одним символом. С моей настройкой происходит, что файл открывается, и если VIM видит минимум один EOL, он сохраняет его внутри. Если вы сохраняете этот файл, независимо от того, где он находится (вы можете проверить, набрав set eol?. В случае, если вы хотите избавиться от этого внутренне сохраненного EOL, просто скажите set noeol, а затем сохраните и BOOM , последний EOL удален.

WHOOO, мне не терпится набрать это.

7 голосов
/ 11 ноября 2010

Это даже лучше, я нашел где-то:

au BufWritePre * :set binary | set noeol
au BufWritePost * :set nobinary | set eol
5 голосов
/ 09 ноября 2010

Из документации vim:

'binary' 'bin'      boolean (default off)
            local to buffer
            {not in Vi}
    This option should be set **before** editing a binary file.  You can also

Поэтому вы должны использовать vim -b или :e ++bin file или перезагрузить, используя :e! ++bin.

1 голос
/ 09 ноября 2010

Я придумал это:

" php remove eol from end of file
autocmd FileType php setlocal noeol binary fileformats="mac,unix,dos"

Спасибо всем.

Приветствия.

...