【问题标题】:Detecting file type for C++ standard headers with vim使用 vim 检测 C++ 标准头文件的文件类型
【发布时间】:2012-06-09 21:05:40
【问题描述】:

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

但它不起作用(即未检测到文件类型)。

是否可以使用该方法检测文件类型?它是否存在任何插件或任何其他方式来解决这个问题?

【问题讨论】:

标签: c++ linux vim file-type


【解决方案1】:

n.m 的回答可以解决问题,但这样更好:

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

search 的额外参数是 stopline,并确保该规则仅适用于具有 1 行中模式的文件。

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

另外,使用停止线 w 标志是不必要的。

查看:help search了解更多信息。

【讨论】:

    【解决方案2】:

    * 在 Vim 搜索中通常是特殊的。要禁用它,请在搜索字符串的开头使用\M,即

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

    这实际上对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多