在VIM中,有没有办法为模板尖括号定义syn区域而不与小于号冲突?

2024-02-18

As for {,} and [,] and (, ),我真的希望能够定义syntax region for <, >用于 C++ 模板使用,如下所示:

a<b>

但是,有没有什么方法可以创建这样的语法区域而不与以下内容发生冲突:

if( a < b<c>::d )

首先<显然是一个“小于”运算符,并且应该作为模板参数区域的开始而被丢弃。

我尝试过使用多种选项,但无法使其发挥作用。尝试使用复杂的正则表达式来识别模板参数区域而不是小于操作似乎确实是不可能的,它只能通过使用嵌套自引用模式检查平衡对来工作。


根据 @ingo-karkat 的回答,我对空格的使用进行了进一步的思考,我认为我得到了一个足够好的匹配模式,对此感到满意(我认为这捕获了 90% 以上的情况)。

syn region AngleBrackets matchgroup=AngleBracketContents 
start='[[:space:]<]\@<!<<\@!'
end='>'

start火柴<那不是preceded通过空格或<。检查是否存在preceded空格是一个关键因素,因为大多数时候关系运算都会被空格包围,而且,很常见的做法是不在模板左括号之前加上空格。

我还检查它是否没有立即跟随另一个<.

这是一个快照我在做什么 https://github.com/oblitum/rainbow(区域内的运算符获取区域的颜色,嵌套区域改变颜色,它基于彩虹括号构建,经过一些细微的修正改进):

UPDATE

刚刚将我的 VIM 正则表达式更改为:

\v%(<operator\_s*)@<!%(%(\_i|template\_s*)@<=\<[<=]@!|\<@<!\<[[:space:]<=]@!)

最后一个实际上将帮助我强化良好的代码风格。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在VIM中,有没有办法为模板尖括号定义syn区域而不与小于号冲突? 的相关文章

  • 在 VIM 中缩进文件夹中的所有文件

    我有一个包含数百个 TTL TeraTermLanguage 文件的文件夹 现在我想缩进所有这些文件 我已经创建了用于缩进的 teraterm vim 并使用 VIM 打开一个文件并执行 gg G 整个文件得到了正确的缩进 但是有什么方法可
  • 在 Vim 中的缩进线上按“Home”

    我有一个坏习惯 就是使用 home 键返回到行首 当我最近开始使用 vim 时 我注意到当我在缩进的行上按 home 键时 它会让我回到该行的开头 在 Notepad 我曾经使用的编辑器 中 它会让我返回到该行代码的开头 就在缩进之后 有没
  • 运行 tmux 时映射箭头键

    这些键映射在 tmux 中停止工作 在我的 vimrc 我有 nmap
  • 禁用 VIM 中的警告?

    有没有办法禁用 VIM 中的警告 特别是 当文件从只读变为可写时 我想禁用警告 12 我有一个脚本可以打开文件进行编辑 但 vim 认为文件已更改并发出警告 Thanks 我的 vimrc 中有以下内容 你应该只需要第二个 它将消息回显到状
  • 使用 vim pythoncomplete 的 Python 文档字符串不显示我自己的类函数的换行符

    我在尝试使用时得到了一些意想不到的结果Python 全方位补全 http www vim org scripts script php script id 1542在我自己的类函数上 函数的文档字符串未正确设置换行符格式 如下图所示 当我从
  • 使 'n' 始终向前搜索,无论是否 / 或 ?用于搜索

    我几乎总是在 Vim 中搜索 然后继续向前搜索n并向后N 然而 有时我会使用 跳转到我当前所在行上方几行的项目 在这种情况下 如果我想向前搜索同一项目 我必须使用N代替n 令人烦恼的心理减速带 所以我的问题是 是否有可能使n永远向前走 并且
  • C# 开发人员有什么理由应该学习 Emacs/Vim 吗?

    我在一家纯粹的 Microsoft 商店担任 C 开发人员 最近 我开始在工作之余的空闲时间使用 Gas 和 Linux 自学汇编 我喜欢摆弄 Linux 尽管我对它还很陌生 我一直听说我应该学习 VIM 或 Emacs 但事实是 我绝对不
  • 如何让 Vim 突出显示非 ascii 字符?

    我试图让 Vim 突出显示非 ASCII 字符 是否有可用的设置 正则表达式搜索模式或插件来执行此操作 在 a 中使用范围 搜索中的字符类 您应该能够excludeASCII 十六进制字符范围 因此突出显示 假设您有hlsearch启用 所
  • 使用模糊搜索在 Vim 中打开文件

    我正在寻找一种方法 使 Vim 能够通过模糊搜索文件名来打开文件 基本上 我希望能够定义一个项目一次 然后有一个快捷方式 它可以为我提供一个输入文件名的位置 并且如果有任何字母匹配 则将进行匹配 这种功能存在于我见过的大多数编辑器中 但我一
  • 开发人员实际上是否使用 vim 在 Windows 操作系统上编写代码(Java)? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 无法理解 .vimrc 中的一行

    我不明白以下行在 vimrc 中的作用 nmap
  • 如何在 Vim 中同时打开多个文件?

    有没有办法从 Vim 中打开目录中的所有文件 所以一个 command这实际上是说 打开下面的所有文件 some path进入缓冲区 理想情况下 递归地打开目录下的所有文件会很棒 您正在寻找的命令是 args 例如 args path to
  • 如何让 Vim 匹配不以七位数字开头的行?

    我有一个大约 1000 行的文件 除个别行外 所有行均以七位数字开头 我需要捕捉这些行并将它们与前一行实际连接起来 我已经成功地能够使用以下正则表达式模式匹配以七位数字开头的任何行 d 7 我似乎无法让它匹配任何一行不匹配不过 这种模式确实
  • 如何在 Vim 中创建行号和文本之间的边框

    我希望在行号右侧和文本左侧有一条细边框线 您可以使用不同的颜色来突出显示LineNr 例如 hi LineNr cterm bold ctermbg gray ctermfg black gui bold guibg gray guifg
  • MacVim:跨窗口共享命名寄存器?

    我想跨 MacVim 窗口共享命名寄存器缓冲区 就像我在单个实例中跨缓冲区一样 换句话说 假设我标记了一个位置 m 然后去其他地方 我将一些文本拉入寄存器 a 从当前点到 m a m 然后我转到另一个窗口 不 我不是指同一窗口中的另一个分割
  • Linux/Ubuntu 目录位置 ~/.vim/syntax/

    文件夹的默认位置在哪里 vim syntax 在Linux系统上 我正在尝试添加一个 Python 插件 您正在寻找 runtimepath 选项 该文档非常详细 使用 help runtimepath 但我会尝试在这里总结一下 The 运
  • 在 Vim 中平滑滚动的最佳方法是什么?

    Vim 中的主要滚动命令是 Ctrl B and Ctrl F as well as PageUp and PageDown scroll by full page Ctrl U and Ctrl D scroll half a page
  • 在 vim 中执行 python 命令并获取输出

    当 Vim 编译时支持 Python 时 您可以使用 Python 编写 Vim 脚本 python命令 我将如何使用它来执行命令并将结果插入光标下 例如 如果我要执行 python import os os listdir aDirect
  • 设置 vim 命令的键盘快捷键

    说我想要
  • Vim 状态栏预测/完成?

    昨天我玩了一些 vim 脚本 并设法对我目前正在输入的内容进行一些超出状态栏的预测 通过循环 请参阅屏幕截图 灰色 黄色条 问题是 我不记得我是如何得到它或找到我用于 vim 魔法的代码片段 我记得它非常简单 它要么是文档中的示例 要么是我

随机推荐