创建新文件时如何保留^ M?

时间:2018-07-31 08:02:08

标签: vim newline

文件^M中每一行的末尾都有target.html
^ M恰好是vim在Windows中显示0xD的方式,\r\n用于换行。

enter image description here

head -n 10 target.html > new.html

vim new.htmlset list代表new.html

enter image description here

为什么^M文件中没有new.html

file target.html
target.html: HTML document, ISO-8859 text, with CRLF, LF line terminators
file new.html
new.html: HTML document, ASCII text, with CRLF line terminators

我感到困惑的是,new.html的结尾每一行都是0d0a,为什么用vim打开它时没有显示^M

xxd new.html
00000000: 3c68 746d 6c20 786d 6c6e 733a 763d 2275  <html xmlns:v="u
00000010: 726e 3a73 6368 656d 6173 2d6d 6963 726f  rn:schemas-micro
00000020: 736f 6674 2d63 6f6d 3a76 6d6c 220d 0a78  soft-com:vml"..x
00000030: 6d6c 6e73 3a6f 3d22 7572 6e3a 7363 6865  mlns:o="urn:sche
00000040: 6d61 732d 6d69 6372 6f73 6f66 742d 636f  mas-microsoft-co
00000050: 6d3a 6f66 6669 6365 3a6f 6666 6963 6522  m:office:office"
00000060: 0d0a 786d 6c6e 733a 773d 2275 726e 3a73  ..xmlns:w="urn:s
00000070: 6368 656d 6173 2d6d 6963 726f 736f 6674  chemas-microsoft
00000080: 2d63 6f6d 3a6f 6666 6963 653a 776f 7264  -com:office:word
00000090: 220d 0a78 6d6c 6e73 3a6d 3d22 6874 7470  "..xmlns:m="http
000000a0: 3a2f 2f73 6368 656d 6173 2e6d 6963 726f  ://schemas.micro
000000b0: 736f 6674 2e63 6f6d 2f6f 6666 6963 652f  soft.com/office/
000000c0: 3230 3034 2f31 322f 6f6d 6d6c 220d 0a78  2004/12/omml"..x
000000d0: 6d6c 6e73 3d22 6874 7470 3a2f 2f77 7777  mlns="http://www
000000e0: 2e77 332e 6f72 672f 5452 2f52 4543 2d68  .w3.org/TR/REC-h
000000f0: 746d 6c34 3022 3e0d 0a0d 0a3c 6865 6164  tml40">....<head
00000100: 3e0d 0a3c 6d65 7461 2068 7474 702d 6571  >..<meta http-eq
00000110: 7569 763d 436f 6e74 656e 742d 5479 7065  uiv=Content-Type
00000120: 2063 6f6e 7465 6e74 3d22 7465 7874 2f68   content="text/h
00000130: 746d 6c3b 2063 6861 7273 6574 3d67 6232  tml; charset=gb2
00000140: 3331 3222 3e0d 0a3c 6d65 7461 206e 616d  312">..<meta nam
00000150: 653d 5072 6f67 4964 2063 6f6e 7465 6e74  e=ProgId content
00000160: 3d57 6f72 642e 446f 6375 6d65 6e74 3e0d  =Word.Document>.
00000170: 0a3c 6d65 7461 206e 616d 653d 4765 6e65  .<meta name=Gene
00000180: 7261 746f 7220 636f 6e74 656e 743d 224d  rator content="M
00000190: 6963 726f 736f 6674 2057 6f72 6420 3132  icrosoft Word 12
000001a0: 223e 0d0a                                ">..

感谢Amadan,我的target.html中只有LF结尾。
enter image description here

1 个答案:

答案 0 :(得分:3)

target.html: HTML document, ISO-8859 text, with CRLF, LF line terminators

这是线索。您的target.html似乎混合了CRLF结尾和LF结尾。这会使Vim感到困惑,并使其确定fileformat=unix并将^M显示为恰好位于行尾的字符。

new.html: HTML document, ASCII text, with CRLF line terminators

当您剪切前10行时,碰巧所有这些行都有CRLF结尾。 Vim高兴地得出结论:“这应该是DOS文件!”,设置ff=dos并且不向您显示^M,因为它现在是行终止符的一部分。

就像您可以检查file的想法一样,您也可以使用:set ff?来检查Vim的想法

顺便说一句,您可以使用/^M\@<!$(其中^M Ctrl-V )找到违规行(使用LF而不是CRLF的行)输入)。