我有一个工具打开文件并强制使用特定的文件类型。它启动 vim,参数如下:
vim -c 'set filetype=foo' [file1 [file2 [...]]
这对于第一个文件,但正如您所期望的那样,这仅适用于第一个文件,因为它相当于在启动后更改文件类型一次。命令行上的每个后续文件都会选择 vim 的默认/自动检测的文件类型,而不是foo
.我可以用以下方法解决这个问题:
vim -c 'au BufRead * set filetype=foo"'
但这会覆盖全部文件,包括我随后打开的文件,例如通过gf
.理想情况下,我只希望将识别的文件设置为foo
,而不是其他任何内容。我不知道有任何简单的启发式方法可以通过名称或内容检测文件类型:它是上下文相关的(请注意,我无法向文件添加提示,尽管它们通常仅限于一个目录,如果有帮助的话)。
有没有办法只为指定的文件设置默认文件类型?如果做不到这一点,是否有另一种相当干净的(即我仍然希望能够在另一个窗口中正常使用 vim)方法来处理它,例如一些 hack 来覆盖ftdetect
一个会话的行为?
答案1
原则上,使用argdo
为每个参数运行命令(bufdo
也可以在这里工作)的方法是有效的。作为奖励,预先设置silent
以避免遇到烦人的“按 ENTER”提示。
简洁版本
vim +'sil argdo se ft=foo' file1 file2...
长版
vim -c 'silent argdo set filetype=foo' file1 file2...
实际上,后续文件不会启用语法突出显示(请参阅使用 argdo 打开多个文件时,vim 中未打开语法突出显示)。这可以通过以下方式修复:
vim -c 'silent argdo set eventignore-=Syntax | set ft=foo' file1 file2...
然而,有聊天中报告该解决方法并不适合所有人。它适用于 Vim 版本 8.1 p1-2269 和 8.2 p1-2367。