regex - 如何在 Vim 语法中突出显示以 ‘@’ 开头的单词?

标签 regex vim syntax

我有一个非常简单的 Vim 语法文件用于个人笔记。我想突出显示人们的名字,我选择了类似 Twitter 的语法 @jonathan .

我试过:

syntax match notesPerson "\<@\S\+"

意思是:以 @ 开头的词并且至少有一个非空白字符。问题是@似乎是 Vim 正则表达式中的一个特殊字符。

我试图逃跑 \@并用括号括起来 [@] ,通常的技巧,但这不起作用。我可以尝试类似 (^|\s) (行或空格的开头)但这正是 word-boundary 试图解决的问题。

突出显示适用于简化的正则表达式,因此这更像是一个找到正确的正则表达式的问题。我错过了什么?

最佳答案

@仅当您启用“非常神奇”时才为特殊字符
模式通过 \v在该模式之前的某个位置 @ .

你还有一个问题:@不开始一个新词。 \<
不仅仅是像 perl/PCRE 那样的“词边界”\b ,但是“左词
边界”(帮助:“词的开头”)意思是 \<必须是
后跟一些关键字字符。如 @通常不是关键字
字符、图案 \<@永远不会匹配。 (即使它就像\b ,它将匹配像 abc@def 这样的结构这绝对不是
由于上述原因,您想要什么。)

您应该使用 \k\@<!@\k\S*相反:\k\@<!确保 @前面没有任何关键字字符,\k\S*确保名称的第一个字符是关键字(您也可以使用 @\<\S\+ )。

还有另一种解决方案:包括 @进入 'iskeyword'选项并保留正则表达式:

:setlocal iskeyword+=@-@

:help 'isfname'解释为什么@-@在这里使用。
('iskeyword' 选项具有完全相同的语法,并且将,
实际上,将您重定向到那里以进行解释。)

关于regex - 如何在 Vim 语法中突出显示以 ‘@’ 开头的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13940823/

相关文章:

javascript - Express.js : capture generic routes with numeric Id

java - 计算点数[.] , !和 ?在文字中

insert - 使用 Vim 将文件名写入文件

javascript - 提示命令语法

php - $_GET 和 $_POST

php - 正则表达式删除新行和空格

javascript - 将 Javascript 正则表达式转换为 C# 正则表达式

python - 当存在 locals() 时,是否有可以忽略 ' assigned to but never used' 的 python 语法检查器?

vim - 如何在 vim 中用抽出的行替换搜索到的行?

ruby - Ruby 实例变量什么时候设置?