在编辑器中查看换行符和回车符
Posted
技术标签:
【中文标题】在编辑器中查看换行符和回车符【英文标题】:See line breaks and carriage returns in editor 【发布时间】:2011-04-21 02:30:55 【问题描述】:Linux 上是否有一个文本编辑器可以让我查看换行符和回车符? Vim 支持这个功能吗?
【问题讨论】:
注意:有时换行符 ($) 和回车符 (^M) 隐藏在许多配色方案中,并且在使用 putty 进行 ssh 时也是如此。 OP 我认为您应该重新考虑选择的答案。因为选择的答案不起作用。但 CaptSaltyJack 的回答效果很好。 OP 两者都会显示@arno 的解决方案。我需要同时查看,因为我有一个随机使用所有 3 种文件格式的文件......而且 arno 的解决方案有效 【参考方案1】:假设:set listchars=...
的 vim 设置被设置为可视化您试图查看的字符,在这种情况下,回车字符(使用 CTL + V、CTRM + M 键入) —— 否则,正如许多关于此答案的 cmets 所报告的那样,^M 字符将不会显示在 :set list
:set list
在 Vim 中会显示空格。行尾显示为“$
”,回车通常显示为“^M
”。
【讨论】:
同样的问题:superuser.com/questions/97692/… 不正确,:set list
不会显示 ^M
字符 (CR)。为 vi/vim 提供 -b
选项将起作用。或者,一旦 vim 被加载,输入::e ++ff=unix
仅供参考,要关闭“设置列表”模式,请使用:set nolist
错误答案。 :set list 不会显示 ^M 个字符 (CR)。对 vi/vim 使用 -b 选项即可。
据我了解,只有当 Vim 认为文件的 fileformat
是 unix
时,Vim 才会显示 ^M 字符。这通常发生在一行或多行以\n
unix 样式的换行符结尾,但其他行以 Windows 使用的\r\n
CRLF 组合结尾时。然后以 CRLF 行结尾的行将显示 ^M 字符。【参考方案2】:
vi 通过在下一行显示后续文本来显示换行符(LF 字符,代码 x0A
)。
将-b
开关用于二进制模式。例如,vi -b filename
或 vim -b filename --
。
然后它将在 Unix 样式文件中通常不使用的 CR 字符 (x0D
) 显示为字符 ^M
。
【讨论】:
我通常不需要看到行尾,因为我主要在Unix
环境中工作。但是,如果文件中有任何 Windows 类型行结尾,我想被警告。 vi -b filename
或 :set binary
如果它是 windows 类型的文件,是否只显示 ^M
而没有其他行结尾?【参考方案3】:
不同意官方回答:
:set list
将不显示 ^M 个字符 (CR)。为 vi/Vim 提供 -b 选项将起作用。或者,在加载 Vim 后,输入 :e ++ff=unix
。
【讨论】:
这是语法。:help edit
显示 e[dit]! [++opt] [+cmd]
。 :help ++e
说 [++opt] 参数可用于强制 'fileformat' [..] 的值。
澄清一下,:set list
显示换行符 ($
),:e ++ff=unix
显示 CR (^M
);如果你想同时看到,:set list
然后:e ++ff=unix
为了扩展@dennis 的评论,:set ff=unix
告诉 Vim 将行尾更改为 unix 样式(作为设置文件格式的一部分),所以 ^M 字符是不再存在(因此不显示)。 :e ++ff=unix
告诉它强制将文件格式设置为unix
而不实际更改内容。因此 vim 像 Unix 文件一样读取它,将 CR 字符视为额外字符并将它们显示为 ^M。
由于某种原因,vim
中的任何一个都对我不起作用......我的意思既不是-b
选项,也不是:e ++ff=unix
在里面时:(
好吧,:e ++ff=unix 工作。现在我该如何关闭它?【参考方案4】:
试试下面的命令。
:set binary
在 Vim 中,这与使用“-b”命令行选项的作用相同。如果你把它放在你的启动文件(即.vimrc)中,它会一直为你准备好。
在许多 *nix 系统上,有一个“dos2unix”或“unix2dos”命令可以处理文件并纠正任何可疑的行结束问题。如果行尾没有任何问题,则不会更改文件。
【讨论】:
不幸的是,在我的系统(Ubuntu 16.04)中set binary
与vim -b filename.py
不同。知道为什么吗?我确实检查了help
,看来您所说的通常是正确的。我如何弄清楚为什么会这样?
:e ++ff=unix
确实正确显示了^M
,当我使用unix
类型文件时没有显示它。所以我想问题现在已经解决了......【参考方案5】:
我建议你编辑 .vimrc 文件,以运行命令列表。
编辑你的 .vimrc 文件,像这样:
cat >> ~/.vimrc <<EOF
set ffs=unix
set encoding=utf-8
set fileencoding=utf-8
set listchars=eol:¶
set list
EOF
当你执行 Vim 时,文件 .vimrc 中的命令被执行,你可以看到这个例子:
My line with CRLF eol here ^M¶
【讨论】:
【参考方案6】:只是为了澄清为什么 :set list
不会在没有 e ++ff=unix
的情况下将 CR 显示为 ^M
以及为什么 :set list
与 ^M
无关。
在内部,当 Vim 读取一个文件到它的缓冲区时,它会用它自己的表示替换所有行结束字符(我们称之为$
's)。为了确定应该删除哪些字符,它首先检测文件中存储的行尾格式。如果只有 CRLF '\r\n'
或只有 CR '\r'
或只有 LF '\n'
行尾字符,则'fileformat'
分别设置为dos
、mac
和unix
。
当设置了list
选项时,无论检测到什么fileformat
选项,Vim 都会在出现换行时显示$
字符。它使用自己的换行符的内部表示,这就是它所显示的内容。
现在,当您写入缓冲区到光盘时,Vim 会根据检测到的fileformat
选项插入行尾字符,基本上将所有这些内部$
转换为适当的字符。如果fileformat
恰好是unix
,那么它将简单地写\n
来代替其内部换行符。
诀窍是强制 Vim 将 dos
编码文件读取为 unix
一个。最终效果是它将删除所有\n
的所有\r
保持不变并将它们显示为^M
在您的缓冲区中。设置:set list
还会将内部行尾显示为$
。毕竟,您会看到 ^M$
代替 dos
编码的换行符。
还要注意:set list
与显示^M
无关。您可以通过在插入模式下使用CTRL-V
后跟Enter
插入单个CR 来自行检查(确保您首先禁用了list
选项)。将缓冲区写入光盘并再次打开后,您将看到 ^M
,尽管 list
选项设置为 0。
您可以在http://vim.wikia.com/wiki/File_format 或在 Vim 中输入:help 'fileformat'
找到有关文件格式的更多信息。
【讨论】:
【参考方案7】:您可以使用gedit 编辑器查看断线。
首先,如果您没有安装它,对于基于 Debian/Ubuntu 的发行版::
sudo apt-get install gedit
现在,安装 gedit 插件:
sudo apt-get install gedit-plugins
然后选择Draw Spaces插件,进入Preferences,然后选择Draw new lines:
使用Visual Studio Code,您可以安装行尾扩展。
Sublime Text 3 有一个名为 RawLineEdit 的插件,它将显示行尾并允许插入任意行尾类型
Shift + Ctrl + P 并开始输入插件的名称,然后切换以显示行尾。
【讨论】:
apt-get
不适用于所有 Linux 系统(此问题的范围)。也许陈述假设? Ubuntu? Linux Mint? Ubuntu MATE? Debian?【参考方案8】:
通过使用cat 和-A
,您可以看到新行为$
,标签为^I
:
cat -A myfile
【讨论】:
'cat -A' 不如 'cat -e' 便携。 -A 受 GNU coreutils 版本的 cat(1) 支持,但不支持其他实现(例如 bsd、macos 等)。 和:%!cat -A
在 vim 中使用(虽然这当然会改变缓冲区的内容)以上是关于在编辑器中查看换行符和回车符的主要内容,如果未能解决你的问题,请参考以下文章