如何在vim会话期间保持缓冲区的语法高亮?

5

当我打开一个文件时

 :e x

并更改其文件类型

 :set ft=plsql

我可以看到设置文件类型的效果,因为缓冲区中的关键词根据我刚刚设置的文件类型(语法)进行了高亮显示。

然后,我打开另一个文件。

 :e y

并切换回我设置文件类型的文件

 :e #

尽管文件类型仍然有效,但关键词高亮显示丢失了。
 :set ft?

确认文件类型为plsql。

那么,我如何让vim在我切换回文件时保持高亮显示?


这里有两个相关的选项:'filetype''syntax'。通常情况下,当'ft'改变时,'syntax'也会被更新。在切换出x之前和之后尝试:verbose set ft? syntax?。你甚至可以使用Syntax和FileType自动命令来添加一些调试。 - benjifisher
1个回答

4
我假设你已经设置了"set nohidden"(或者说没有设置"set hidden")。这意味着,任何没有被显示的缓冲区都会被卸载。因此,":e y"会让Vim完全忘记"x"。当你执行":e #"时,你不是返回到"x",而是重新加载它。由于它是一个全新的缓冲区,你的"filetype"当然不在那里。
如果你设置了"set hidden",打开"y"即使它没有被显示,也不会卸载"x",而":e #"只会显示包含"x"的缓冲区(其中已经设置了"filetype")。这也有助于使Vim变得更加友好,因为你可以加载其他文件而不必将当前更改写入磁盘,也不必在你想要加载另一个文件时不断被Vim骚扰,如果你有未保存的更改。
编辑:解释似乎是错误的。修复仍然是"set hidden"。去理解吧。

谢谢你的回答。我不明白的是:你写道“由于这是一个全新的缓冲区,所以你的文件类型当然不存在”。但是当我在:e#之后执行:set ft?时,它确实报告了plsql,因此文件类型似乎并没有丢失。 - René Nyffenegger
哦,你说得对。我没想到会这样。也许我的“为什么”完全错了。然而,“如何”似乎仍然有效:我无法使用“set hidden”重现你的症状。 - Amadan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接