为什么我需要在二进制模式下使用vim才能使'noeol'工作?

83 浏览
0 Comments

为什么我需要在二进制模式下使用vim才能使'noeol'工作?

这个问题是对我在“保存vim文件时,强制添加末尾换行符”的问题的一个后续。基本上,我不能在我的.vimrc中使用\"set noeol\",因为它没有效果!但是,如果我在二进制模式下编辑文件,它会按照预期的方式工作(使用\"vim -b file\"而不是\"vim file\")。为什么会这样?有没有办法在.vimrc中简单设置,使得我编辑的每个文件都不添加新行?此外,如果我开始以二进制模式编辑每个文件,我会遇到什么问题?到目前为止,我还没有看到任何不同。

0
0 Comments

为什么我需要在二进制模式下使用vim的'noeol'选项才能生效?

根据vimdoc文件中的说明,除非打开了'binary'选项,否则'noeol'选项不会起作用。

当写入文件时,如果打开了'binary'选项且关闭了'noeol'选项,最后一行不会写入<EOL>。该选项会在开始编辑新文件时自动设置,除非文件的最后一行没有<EOL>,这种情况下会被重置。通常情况下,你不需要设置或重置该选项。当'binary'关闭时,该选项的值在写入文件时不会被使用。当'binary'打开时,它会用于记住文件中最后一行是否存在<EOL>,以便在写入文件时保持与原始文件相同的情况。但是如果需要的话,你可以更改它。

所以,如果你想要在写入文件时不添加<EOL>,你需要在二进制模式下使用vim的'noeol'选项。

这是唯一的实际答案。尽管答案更加有用 🙂

0
0 Comments

为什么我需要在二进制模式下使用vim才能使'noeol'工作?

问题的原因是,在版本7.4.785之后,vim引入了`fixendofline`设置。这个设置的作用是在文件的末尾自动添加换行符。然而,很多时候我们可能不希望在文件末尾添加换行符,而是希望文件末尾没有换行符。因此,我们需要将`fixendofline`设置为关闭。

解决方法是,可以避免使用`binary`模式(因为它有一些副作用),而是简单地设置以下两个选项:

set noendofline
set nofixendofline

通过将这两个选项设置为关闭,我们可以确保在保存文件时不会自动添加换行符,从而满足我们的需求。这样,在非二进制模式下使用vim时,即使没有换行符也能正常工作。

0
0 Comments

为什么我需要在vim的二进制模式下使用'noeol'才能生效?

问题出现的原因:

Vim在文件的最后一行末尾添加的是“换行符”,而不是“新的一行”。换行符(也叫做行结束符)的意思是“在此之后的内容必须被视为另一行”。按照这种解释,换行符是行的终止符,因此文件的最后一行实际上是最后一行带有换行符的那一行。

问题的解决方法:

大多数编辑器和IDE有不同的解释方式,即换行符是行的分隔符。因此,默认情况下它们不会在新文件的最后一行添加换行符,并且在遇到换行符时会在真正的最后一行之后添加一个多余的“新行”。

为了解决这个问题,可以在写入文件之前执行以下操作:如果要保持“无换行符”状态,则执行“:set binary noeol”。

但是,':h 'binary''命令对于':set binary'命令的危险性有很多说明,因此我认为始终打开该选项听起来并不是一个好主意。

为了说明不同的行为,下面是尝试连接两个带有换行符的文件时会发生的情况:

$ 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

下面是尝试连接两个没有换行符的文件时会发生的情况:

$ 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程序默认将换行符解释为终止符,并在最后一行末尾添加一个换行符的原因。

上面的图片展示了一个带有换行符的简单文件,使用nano(使用Vim也是一样)创建,并在Eclipse、TextMate、Sublime Text、Vim、Xcode和TextEdit中打开。

这张图片展示了一个没有换行符的简单文件,使用Sublime Text创建,并在相同的编辑器/IDE中打开。

有人问相反的问题吗:为什么有些编辑器在文件末尾显示一个空行?

作为一个经常使用Vim的用户,我坚决认为换行符是必需的行结束符。然而,站在反对者的立场上来说:如果其他编辑器不在最后一个换行符后显示一个空行,用户将如何将光标定位到那里以便在换行符后添加一行?对于TextEdit来说尤其如此。对于TextMate来说,如果文件只有3行,可能会在“3”下面显示一个灰色的方块,直到用户开始输入,此时它变成一个“4”,并自动添加第四个换行符。

0