Skip to content

回车换行符

当前使用的电脑是 Windows 11 系统。每次运行 VitePress 本地服务,本地的构建脚本会基于文件路径结构自动生成或增添文件内的 Frontmatter,其本质是通过 JavaScript 刷新 Markdown 文件内的文本内容。

基于历史的原因,不同的操作系统使用不同的换行符标记:

  • Unix: LF
  • Windows: CRLF

Vim 是 Linux 系统的文本编辑工具,沿用 Unix 的惯例,所以使用 LF 做为换行符。在 Windows 系统下,使用大多数的非 Vim/Neovim 文本编辑器创建或修改过的文件,一般都会使用 CRLF 作为换行符。

这样,Windows 系统下使用 Neovim 打开其他工具编辑过的文件,在 Neovim 看来,每一对 CRLF 中多出来的 CR 部分会被解读成 ^M 字符。

检查和比对

  • :h fileformat: string (default Windows: "dos", Unix: "unix") local to buffer
  • :h fileformats: string (default Windows: "dos,unix", Unix: "unix,dos") global

因为使用 Windows 系统,所以在没有进行显式设置的情况下,Neovim 具有以下默认配置:

  • fileformat=dos
  • fileformats=dos,unix

我们通过在 options.lua 内进行设置:

lua
opt.fileformat = "unix"
opt.fileformats = "unix,dos"

同时,项目根目录下的 .editorconfig 内设置:

end_of_line = lf

经过上述设置后,每次运行 VitePress 项目,脚本程序仍然会对 Frontmatter 部分内容进行刷新,使得结束部分的 --- 后面生成一个 ^M 标记。

2025-03-10

兜兜转转,还是又回到这个问题上。今天在回头研究使用空白目录管理 dotfiles 这问题,当在 ~ 目录下,运行 gitbare add AppData/Local/nvim 这个命令时,突然跳出一堆警告信息:

warning: in the working copy of 'AppData/Local/nvim/init.lua', CRLF will be replaced by LF the next time Git touches it

搜索一下错误信息,得到以下解决方案:

如果我们只想在特定的 Git 仓库中禁用 LF 替换为 CRLF,可以在该仓库中执行以下命令:

git config core.autocrlf false

完整,再运行一下 pnpm run docs:dev 命令,烦人的 ^M 这次真的是消失不见了。上次生成的,这次刷新后也自动消失不见。

最近更新