Why would Vim add a new line at the end of a file?

后端 未结 5 2002
栀梦
栀梦 2020-12-02 22:22

I work with wordpress a lot, and sometimes I changed wordpress core files temporarily in order to understand what is going on, especially when debugging. Today I got a littl

相关标签:
5条回答
  • 2020-12-02 23:07

    Because vim is a text editor, it can sometimes "clean up" files for you. See http://vimhelp.appspot.com/vim_faq.txt.html#faq-5.4 for details on how to write without the ending newline, paraphrased below:

    How do I write a file without the line feed (EOL) at the end of the file?

    You can turn off the eol option and turn on the binary option to write a file without the EOL at the end of the file:
       :set binary
       :set noeol
       :w

    Alternatively, you can use:
       :set noeol
       :w ++bin

    0 讨论(0)
  • 2020-12-02 23:08

    All the answers I've seen here address the question "how could I prevent Vim from adding a newline character at the end of the file?", while the question was "Why would Vim add a new line at the end of a file?". My browser's search engine brought me here, and I didn't find the answer to that question.

    It is related with how the POSIX standard defines a line (see Why should files end with a newline?). So, basically, a line is:

    3.206 Line
    A sequence of zero or more non- <newline> characters plus a terminating <newline> character.

    And, therefore, they all need to end with a newline character. That's why Vim always adds a newline by default (because, according to POSIX, it should always be there).

    It is not the only editor doing that. Gedit, the default text editor in GNOME, does the same exact thing.


    Edit

    Many other tools also expect that newline character. See for example:

    • How wc expects it.
    • GCC warns about it.

    Also, you may be interested in: Vim show newline at the end of file.

    0 讨论(0)
  • 2020-12-02 23:11

    You can put the following line into your .vimrc

    autocmd FileType php setlocal noeol binary
    

    Which should do the trick, but actually your approach is somewhat wrong. First of all php won't mind that ending at all and secondly if you don't want to save your changes don't press u or worse manually try to recreate the state of the file, but just quit without saving q!. If you left the editor and saved for some reason, try git checkout <file>

    0 讨论(0)
  • 2020-12-02 23:11

    3.206 Line A sequence of zero or more non- characters plus a terminating character.

    Interestingly, vim will allow you to open a new file, write the file, and the file will be zero bytes. If you open a new file and append a line using o then write the file it will be two characters long. If you open said file back up and delete the second line dd and write the file it will be one byte long. Open the file back up and delete the only line remaining and write the file it will be zero bytes. So vim will let you write a zero byte file only as long as it is completely empty. Seems to defy the posix definition above. I guess...

    0 讨论(0)
  • 2020-12-02 23:19

    Adding a newline is the default behavior for Vim. If you don't need it, then use this solution: VIM Disable Automatic Newline At End Of File

    To disable, add this to your .vimrc

    set fileformats+=dos
    
    0 讨论(0)
提交回复
热议问题