去掉 vim 每行结尾的 ^M

作者: , 共 442 字 , 共阅读 0

有时候用vim打开文件,每行结尾都有一个灰色的^M。这个原因是该文件在 windows 或 mac 系统上被创建:

  • windows 的换行符是\n\r
  • mac 的换行符是 \r
  • unix 下的文本换行只需要\n

vim下,这个多余的\r就被显示为^M,虽然显示为两个字符,但其实是一个字符。

大多数情况下,打开这种文件,vim的状态栏会显示文件格式:utf-8[dos]或者utf-8[mac],此时只需要下面命令可转为unix格式,即可删除或转换所有的^M:

:set ff=unix

如果vim显示文件格式已经是utf-8[unix],这时候上述命令就不管用了,说明 vim 识别类型错误,可以先把它纠正(即用dosmac格式打开当前文件),再变更类型:

:e ++ff=dos 
# or
# :e ++ff=mac
:set ff=unix

还有一种方法是字符串替换:

:%s/\r//g

注意这里是用\r而不是^M,这也是很多人不会删除^M的原因。

Q. E. D.

类似文章:
IT » windows terminal, vim
在 VIM 里, Ctrl+V 用来标记一个矩形区域,可以同时操作多行文本,某些时候特别方便。但若用的 SSH 客户端是 windows terminal ,这个快捷键默认为粘贴文本,和 VIM 矩形区域标记的功能冲突(参考 issue: Ctrl+V (vertical selection in Vim) does not work)。
编程 » vim
vim 有一个注释相关的插件 nerdcommenter ,特别好用。可以使用<leader>c快速切换注释状态(不是注释就改成注释,已经是注释则取消注释):
编程 » Linux, Vim, 字符编码
由于 UNICODE 的优势,目前推荐都用 UTF-8 进行编码。
IT » vim
vim 和普通的文本编辑器不一样,不能用鼠标拖动,需要用快捷键操作,控制光标所在位置。
编程 » Python
在 Python3 以上,通常说的字符串是指unicode字符串,以下将不再重复强调。
编程 » VIM
vim 里对代码简单对齐缩进,可以选定文本区域后用快捷键=。如果全文对齐,可以用ggvG=ggvG可以选中全文)。但对于某些复杂的代码(比如html),其对齐可能会乱。
IT » vim
之前用的是 ctrlp ,现在改用 leaderf ,配置更简单(主要是没搞定 ctrlp 过滤指定文件和文件夹),功能也更多一点。
编程 » Matlab
读者来信:
现在越来越多的软件支持端到端加密,服务器和第三方即使获取所有网络流量,也无法查看具体数据内容,从数学和工程上提供安全性。
IT » nginx
在 nginx 里设置了一个转发:
IT »
最近试用了一些 markdown 编辑器,之前最有名的是 simplemde, 2017 年之后未更新,有人在此基础上做了个 easymde,现在还有一些更新。
IT » WSL, win10, windows terminal
WSL 是指 windows subsystem for linux ,在 win10 被引入,为用户提供 Linux 命令行和编程环境。