Vim нет конца строки на последней строке или eof

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

:set binary
:set noeol
:w

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

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

4 ответов


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

что я предлагаю-это небольшая модификация. Положи set binary вверху . Таким образом, любые файлы будут открываться в двоичном режиме. Если у них нет EOL тогда ВИМ обнаружит это и оставит его 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 а затем сохраните и бум, последний EOL удаляется.

Ого, я запыхался, набирая это.


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

au BufWritePre * :set binary | set noeol
au BufWritePost * :set nobinary | set eol

из документации 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.


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

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

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

Ура.