有一段时间,我的笔记本电脑上有一个 vim 配置,我的台式机上还有另一个,所以当我在两个配置之间编辑 Dropbox 上的文件时,我会遇到格式问题。
具体来说,我穿着ffs=mac,unix,dos
一件和ffs=unix,dos
另一件。
现在幸好设置已经修复!但仍有遗留问题(那些尚未打开、转换并使用新设置保存的文件)。
现在,有时当我从使用“mac”的 ff 保存文件的地方打开文件时,我会得到一堆^M
。
所以我这么做了:
e ++ff=mac
setlocal ff=unix
w
纠正该问题。
每次我打开文件时如何自动执行这三行程序?
或者更好的是,每次我打开一个具有非 unix 的 ff 的文件时,它如何自动执行此操作?
我已经在 Google 上搜索过 [每个缓冲区打开时的 vim 任务] 和 [每个文件打开时的 vim 宏],但没有看到任何有用的方法。
(我确信 vim 以其看似无穷的智慧可以解决这一问题,就像它似乎可以解决任何事一样(他们是如何想象并实现所有这些功能的?!)。)
答案1
我犹豫是否要自动修复此问题,但以下自动命令似乎可以完成这项工作。
autocmd BufRead * if line('$') == 1 && getline(1) =~# '\r' | edit ++ff=mac | w ++ff=unix | endif
它会检测仅包含一行且包含嵌入 CR 字符的文件,并自动执行转换。我可能还会添加一个:echomsg
来通知用户。
答案2
不要尝试自动化您的解决方法以解决损坏的设置,请修复设置;即'fileformat'
在所有平台上一致使用某个行结尾,并确保在每个系统上都能正确检测到它(通过将其包含在内'fileformats'
)!
对于 Vimscript 文件,规范格式应该是unix
,因为它可以由 Windows 和 Unix(我想还有 Mac)上的 Vim 处理,而dos
在 Unix 上进行采购时会导致错误。