Vim:\ n vs. \ r

时间:2008-12-08 19:55:11

标签: windows unix vim

我有一段时间没有在Unix系统中使用过vim,但是我记得没有\ r \ n,它始终是\ n。

我在windows下使用gVim,当我搜索换行符号时,我使用\ n。搜索\ r \ n不返回任何内容。但当我替换我必须使用\ r的字符。 \ n给我^ @

有谁能解释这里发生了什么?

8 个答案:

答案 0 :(得分:25)

看起来你在问两件事。其中一个问题是\r\n,其他人已经介绍过。

另一个问题是替换右侧的\n。如果您查看:h s/\n,则表示替换的替换部分中的\n会插入<NUL> / <NL>,而不是换行符。

如果您执行:%s/\n/\n/并在十六进制编辑器中保存并打开文件,则所有^@个字符都是ASCII 0(NUL字符)。为什么Vim开发人员使用左边的\n代表行尾,而右边的\n使用NUL超出了我。但是这种特殊行为与Windows与Unix无关。

答案 1 :(得分:22)

查询:

:set fileformat=unix
:set fileformat=dos

这可以在任一平台上用于切换到其他编码。

答案 2 :(得分:6)

在幕后,Vim使用\ r(回车)来保存行结束(无论文件格式如何,只有在读取或写入文件时才有意义)。 Vim使用\ n来表示NUL。但是,您搜索EOL为\ n,但在替换中,\ n代表NUL。它的解释如下:h sub-replace-sepcial。搜索\ r将找到不属于fileformat的EOL的回车符。有很多解释:h文件格式。

答案 3 :(得分:3)

vim对回车符(\ r)和换行符(\ n)进行了一些处理。例如,如果您在Unix中并且vi显示以'^ M'结尾的行,因为它们是Windows文本文件,那么摆脱它们的简单方法是输入命令

:%s/^V^M/^V^M/g

它看起来不应该做任何事情,但确实如此。

答案 4 :(得分:3)

:%s/^V^M/^V^M/g

同样地,以下内容做同样的事情(我认为),并且更容易输入。

:%s/\r/\r/g

答案 5 :(得分:2)

在unix下,在vim中,^V + <enter>为我提供^M字符\r

此外,除非您告诉它以二进制模式编辑文件,即不使用默认自动模式自动检测行结尾,否则您无法在vim中找到\r。 (它应该在状态中打印[dos]。)

答案 6 :(得分:2)

我认为问题可能在于Windows和Unix做换行的方式。 Unix的格式是\ n(换行),但对于Windows,它是\ r \ n(回车,换行)。

答案 7 :(得分:0)

在Windows中,如果以文本模式打开文件,\ n将被解释为换行符和换行符。这通常不是* nix系统的情况。