C ++的标准头文件通常安装在/usr/include/c++/4.x(Linux)中。由于大多数标头没有任何扩展名(.h,.hpp等),因此vim无法将这些文件的格式识别为C ++。
我在SO中看过其他question,但在那里发布的解决方案并没有解决我的问题。其中一个解决方案涉及使用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
但它不起作用(即,未检测到文件类型)。
是否可以使用该方法检测文件类型?它是否存在任何插件或任何其他方式来解决这个问题?
答案 0 :(得分:4)
*
通常在Vim搜索中很特别。要禁用它,请在搜索字符串的开头使用\M
,即
au BufRead * if search('\M-*- C++ -*-', 'nw') | setlocal ft=cpp | endif
这实际上适合我。
答案 1 :(得分:4)
n.m的答案可以解决问题,但这更好:
au BufRead * if search('\M-*- C++ -*-', 'n', 1) | setlocal ft=cpp | endif
search
的额外参数是停止线,并确保此规则仅适用于格式为 1 的文件。
这很重要,因为如果没有停止线,任何包含模式的文件包括你的vimrc ,都会满足匹配,并可能使用错误的语法规则突出显示。
此外,使用停止线不需要w
标志。
请查看:help search
以获取更多信息。