我是Linux新手,很抱歉我的问题听起来很愚蠢。
我们知道Linux和Mac OS X使用n
(0xa(,这是ASCII换行符(LF(字符。MS Windows和诸如HTTP之类的因特网协议使用序列rn
(0xd 0xa(。如果你在Windows中创建了一个文件foo.txt,然后在Linux文本编辑器中查看它,你会在每行的末尾看到一个令人讨厌的^M
,这就是Linux工具显示CR字符的方式。
但是为什么Linux工具将CR字符显示为^M
?根据我的理解,r
(回车(是将光标移动到当前行的开头,所以显示它的明智方法是,当你打开文件时,你看到光标在该行的开头(包含r
(,所以不应该显示^M
?
PS:有些人发布了如何删除^M
的答案,但我不知道为什么最终会显示^M
,而不是在开始时移动光标,这就是回车的定义。
ASCII控制字符,如TAB、CR、NL和其他字符,用于控制类似电传打字机的显示设备的打印位置。
文本编辑器不是这样的设备。对于文本编辑器来说,将CR字符从字面上视为"意思"是不合适的;转到第一列";;这会使编辑经验变得杂乱无章。
文本编辑器通过解析文本文件的表示来创建呈现给用户的内部表示。在类Unix操作系统上,文件由零行或多行表示,这些行以ASCII NL字符结尾。出现的任何CR字符看起来只是数据的一部分,而不是行分隔的一部分。
并非所有的编辑器都有相同的行为方式。例如,Vim编辑器将检测到文件使用CR-LF行结尾,并使用该表示正确加载该文件。为该缓冲器设置一个标志,指示它是一个"缓冲区";DOS";文件,以便在保存时复制相同的表示形式。
也就是说,在实际的Linux内核中,有一个功能可以使用^M
表示CR等控制字符。任何给定TTY设备的TTY行规程都可以配置为打印此符号中的字符,但仅当回显接收到的字符时。
演示:
$ stty echoctl # turn on notational echo of control characters
$ cat # run some non-interactive program with rudimentary line input
^F^F^F^F^F^F
^C
$
上面,我输入的Ctrl-F被回显为^F
。因此,事实上;Linux编辑器";它使用这种表示法:;规范输入模式";线路纪律。