回车换行符
当前使用的电脑是 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
内进行设置:
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
这次真的是消失不见了。上次生成的,这次刷新后也自动消失不见。