我正在尝试从项目git repo中删除所有CLRF字符。我正在编写一个命令来递归地遍历仓库,以查找实例。但是,在vim中打开时,某些“匹配”非常明确地表明存在^ M,而另一些则不显示这些字符。
但是,运行时
file <filename without visual ^M>
它说
blah.java ASCII Java program text, with CRLF line terminators
和
od -cx <filename without visual ^M>
整个过程以\ r \ n返回。
我只是很感兴趣,为什么vim有时显示它们,而有时却不显示它们。
编辑:
我创建了一个测试文本文件,并手动添加了^ M(即ctrl V + ctrl M),并且vim显示了这些字符。然后我跑了:
sed -i '' -e 's/\r//g' controlm.txt
并用vim打开文件,视觉上的^ M不见了,但是od -cx仍然显示\ r \ n,但是我随后运行了
sed -i '' -e 's/^M//g' controlm.txt
然后它不仅删除了vim中的视觉^ M,而且我已经确认od -cx显示\ r \ n现在只是\ n。
这个问题最好在Superuser.com上而不是在这里问,因为它是关于使用vim而不是编程。但是要回答:
打开文件时,vim尝试检测它是MS-DOS / Windows还是Unix文件。如果所有行均以终止\r\n
,则可能是一个DOS文件,如果仅其中一些终止,vim也可能采用unix。如果文件格式设置为DOS,则vim\r
在读取文件时会忽略,并在读取文件后立即在状态行中显示[dos]。
回写文件时,它以\r\n
;结束每一行。如果文件格式为unix,则以结束行\n
。您可以使用以下命令设置模式
:se fileformat=unix
或者
:se fileformat=dos
尝试x.txt
在Windows中创建文件,然后在vim中打开它。然后,:se fileformat=unix
和:w y.txt
;然后:se fileformat=dos
和:w z.txt
。使用来测试y.txt和z.txt od cx
。y.txt
会有\r\n
行尾,z.txt
不会。
当文件中只有部分(而不是全部)行以结尾时\r
,例如,如果(unix)git向\r
在dos / windows上创建的文件中添加了一些标头(不带),则文件格式检测将首先查看标头,并假定为unix ,\r
在读取时不会从文件的其余部分删除,而是显示为^M
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句