Why do I need vim in binary mode for 'noeol' to work?
这个问题是我使用"在VIM中保存文件,而不在文件末尾使用换行符"的后续工作。
基本上我不能在我的
如果我以二进制模式编辑文件,它会做它应该做的。(用
为什么会这样?
不管怎样,在
另外,如果我开始以二进制模式编辑每个文件,会遇到什么样的问题?到目前为止,我没有看到任何不同。
Vim在文件最后一行末尾添加的是"new line"字符,不应该与"new line"混淆。
"换行"字符或更准确的"行尾"字符(
问题是,大多数编辑器和IDE都有不同的解释——
简而言之,vim没有添加"新行":其他编辑将它的"新行"错误地解释为"新行"。
但你可以通过以下方式来解决这个问题:在你写文件之前,如果你想让它保持"
但是,对于
为了说明不同的行为,当您尝试将两个文件与
1 2 3 4 5 6 7 8 | $ cat file1 $ cat file2 $ cat file1 file2 lorem ipsum Le tramway jaune lorem ipsum dolor sit avance lentement dolor sit amet dans le amet Le tramway jaune avance lentement dans le |
当您尝试连接两个不带
1 2 3 4 5 6 7 | $ cat file1 $ cat file2 $ cat file1 file2 lorem ipsum Le tramway jaune lorem ipsum dolor sit avance lentement dolor sit amet dans le ametLe tramway jaune avance lentement dans le |
第一种行为不知何故是预期行为,也是Vim和许多(如果不是大多数)Unix-Y程序默认使用终止符解释和在最后一行末尾添加
下图显示了一个使用
从7.4.785版开始,VIM具有
1 2 | set noendofline set nofixendofline |
have a simple preference in .vimrc to NOT add newlines at every single file i edit
你可以使用我的PreserveNoeol插件。通过这个简单的设置,您就完成了;或者,您还可以对每个缓冲区进行影响:
1 | :let g:PreserveNoEOL = 1 |
根据Vimdoc,除非
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | *'endofline'* *'eol'* *'noendofline'* *'noeol'* 'endofline' 'eol' boolean (default on) local to buffer {not in Vi} When writing a file and this option is off and the 'binary' option is on, no <EOL> will be written for the last line in the file. This option is automatically set when starting to edit a new file, unless the file does not have an <EOL> for the last line in the file, in which case it is reset. Normally you don't have to set or reset this voption. When 'binary' is off the value is not used when writing the file. When 'binary' is on it is used to remember the presence of a <EOL> for the last line in the file, so that when you write the file the situation from the original file can be kept. But you can change it if you want to. |