为什么我需要在二进制模式下以“ noeol”工作才能工作? th这个问题是我用于“在VIM中保存文件的情况下的工作,而无需在文件结束时强行添加newline”的烦恼。 基本上我不能在我的.vimrc bec中使用set noeol ...

问题描述 投票:0回答:2
.vimrc

,因为它无能为力! 如果我以二进制模式编辑文件,请执行该操作。 (

vim -b file

而不是

vim file
为什么?

在任何我编辑的每个文件中都不添加新线的eyanway preconpers

.vimrc
此外,如果我开始以二进制模式编辑每个文件,我还会遇到什么样的问题?到目前为止,我还没有看到任何区别。
    

文件中的最后一行的末尾是“ newline”字符,该字符不应与“新行”混淆。

“ newline”字符

或更准确地“线的末端”字符(
<EOL>

)的意思是“在此之后发生的任何内容都必须被视为在另一行上”。通过这种解释,

<EOL>

是一行
vim newline
2个回答
126
投票
,该文件的最后一行实际上是最后一个,其中一个具有

<EOL>

.

问题是,大多数编辑器和IDE都有不同的解释 - <EOL>

是行
separator
-逻辑上,在新文件的最后一行的末尾添加
<EOL> ,当他们遇到<EOL>
时,在真实的最后一行之后添加多余的“新线”。
简而言之,vim不会添加“新行”:其他编辑者(错误地)将其“ newline”解释为“新行”。
但是,您可以通过以下内容解决这个问题:在编写文件之前,请

:set binary noeol

如果您希望它保持“无”。

,但是,关于危险的危险有很多话要说,所以我会说,一直在“打开”听起来像是一个坏主意。
为了说明不同的行为,这是您尝试将两个文件与<EOL>相连时发生的情况。 :h 'binary'
当您尝试在没有
:set binary
的情况下加入两个文件时,就会发生这种情况

<EOL>

第一个行为是预期的行为。 VIM和许多(如果不是大多数)Unix-y程序默认为

解释以及在最后一行末尾添加
$ 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
字符的原因是因为
Posix

定义了这一点,并且VIM符合POSIX。

下图显示了一个简单的文件,该文件使用
<EOL>
创建
$ 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相同),并在Eclipse,Textmate,Sublime Text,Vim,Xcode和textedit.

中打开。

(编辑)
该文件中没有第4行,并且束的唯一正确显示文件的编辑器是VIM。行号列的唯一目的是提供有关缓冲区的信息。显示只有3行的4行是一个严重的错误。 (Endedit)

此图显示了另一个不带有崇高文本创建的简单文件,并在同一编辑/ides中打开。

    

从7.4.785版本VIM具有<EOL>

设置。
您可以避免
<EOL>(具有一些副作用),然后简单地设置

nano


vimdoc的符合vimdoc
<EOL>

除非开启fixendofline

模式,否则什么都不做。

binary

.vimrc中的一个简单偏好是在我编辑的每个文件中不添加新线

您可以使用我的

Preservenoeol插件。 在这个简单的设置中,您就完成了;另外,您也可以影响每个缓冲区:

No set noendofline set nofixendofline


25
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.