使用vim检测C++标准头文件的文件类型

5

C++的标准头文件通常安装在/usr/include/c++/4.x(Linux中)。由于大多数头文件没有任何扩展名(.h、.hpp等),因此vim无法将这些文件识别为C++格式。

我在Stack Overflow上看到了这个问题,但是那里发布的解决方案并没有解决我的问题。其中一个解决方案涉及使用modeline,但是标准的C++头文件不包括vim友好的签名。相反,在第一行中包含了类似如下的内容:

// <algorithm> -*- C++ -*-

我想我可以搜索那个模式(-*- C++ -*-)来检测文件类型。之前提到的SO问题中发布的另一个解决方案实际上也是朝着这个方向发展的。答案建议使用:
au BufRead * if search('MagicPattern', 'nw') | setlocal ft=cpp | endif

所以我尝试做:

au BufRead * if search('-*- C++ -*-', 'nw') | setlocal ft=cpp | endif

但是它无法工作(即,文件类型未被检测到)。
使用这种方法是否可能检测文件类型?是否存在任何插件或其他方法来解决这个问题?

1
请查看问题“[如何让Vim从shebang行检测文件类型?] (https://dev59.com/W2ox5IYBdhLWcg3w6oj0)” - ib.
2个回答

4

* 在 Vim 搜索中通常有特殊含义。要禁用它,请在搜索字符串开头使用 \M,例如:

au BufRead * if search('\M-*- C++ -*-', 'nw') | setlocal ft=cpp | endif

这对我实际有效。

4

n.m的回答行之有效,但这种方法更好:

au BufRead * if search('\M-*- C++ -*-', 'n', 1) | setlocal ft=cpp | endif
< p > search 的额外参数是 stopline,它确保此规则仅适用于第1行中具有模式的文件。

这很重要,因为没有 stopline,任何包含该模式的文件,包括您的 vimrc,都将满足匹配并可能使用错误的语法规则进行突出显示。

此外,使用 stopline 时不需要 w 标志。

请查看 :help search 获取更多信息。


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