如何在Vim中仅在某些上下文中启用语法隐藏?

如何在Vim中仅在某些上下文中启用语法隐藏?,vim,syntax,Vim,Syntax,我想隐藏名称基于希腊符号的变量,并将其转换为Unicode等效符号,其工作原理与此类似。例如,我有: syntax match scalaNiceKeyword "alpha" conceal cchar=α 定义在一个文件中,用于在Scala文件中隐藏,除了过于激进之外,它工作得非常好。如果我写字母表,它就会被隐藏成α表,这显然是错误的 如何修改或扩展此隐藏语句,使其仅隐藏与[\u]alpha[\u]匹配的关键字?换句话说,我需要以下转换: alpha_1 => α

我想隐藏名称基于希腊符号的变量,并将其转换为Unicode等效符号,其工作原理与此类似。例如,我有:

syntax match scalaNiceKeyword "alpha" conceal cchar=α
定义在一个文件中,用于在Scala文件中隐藏,除了过于激进之外,它工作得非常好。如果我写
字母表
,它就会被隐藏成
α表
,这显然是错误的

如何修改或扩展此隐藏语句,使其仅隐藏与
[\u]alpha[\u]
匹配的关键字?换句话说,我需要以下转换:

alpha_1 => α_1
alpha => α
alphabet => alphabet
注意:这与类似,但似乎有点复杂,因为我要匹配的组环境是空格和下划线。天真地定义如下语法区域会导致各种错误:

syn region scalaGreekGroup start="[ _]" end="[ _]"

提前谢谢

修改模式以仅匹配由word分隔的名称 边界或下划线:

:syntax match scalaNiceKeyword '\(_\|\<\)\zsalpha\ze\(\>\|_\)' conceal cchar=α
:语法匹配scalaniekeyword'\(\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
有一个名为的脚本,它定义了在打开/写入时执行
\alpha=>α操作的
imaps
,在保存时执行反向转换。我将其用于latex代码,并对其进行了修改,以放弃回转换,因为我的latex编译器能够正确地执行unicode。
我不知道scala源代码是否可以是unicode,但如果可以的话,你可以看一下。

语法匹配Scalaniekeyword'\'隐藏cchar=α
是否如预期的那样工作?是的,这工作如预期的那样,它不会隐藏像
alpha\u 1
这样的东西。这只解决了一半问题,而且不匹配。你的建议似乎与语法关键词scalaniekeyword Alpha undery cchar=Α相当,我真正想要的是与
Alpha_1
匹配并将其转换为
Alpha_1
,而不匹配
alphabet
@fozziethebeat:我错过了那个细节。答案已更新。太棒了!,看起来有点粗糙,但效果很好。有可能不隐藏下划线吗
1α2
变成了
1α2
,虽然可读,但有点时髦。@fozziethebeat:当然,这是可能的。使用
\zs
\ze
原子将匹配的开始和结束设置为隐藏,就像在更新答案中一样。哈,我不知道你可以这么做。这听起来有点重,但我宁愿隐瞒事实而不改变角色。