Vim:\n vs.\r

Wha*_*awg 23 unix windows vim

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

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

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

Bri*_*per 26

看起来你在问两件事.一个问题是\r\n这些人已经覆盖.

另一个问题是\n在替代的右侧.如果你看:h s/\n,它表示\n在替换的替换部分中插入<NUL>/ <NL>,而不是换行符.

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


Jon*_*ler 22

查询:

:set fileformat=unix
:set fileformat=dos
Run Code Online (Sandbox Code Playgroud)

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


gra*_*ywh 7

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