vim 语法区域:如何使用字符串作为开始/结束模式?

vim 语法区域:如何使用字符串作为开始/结束模式?

我想在我的语法文件之一中添加类似的内容:

let s:mask1="some chars here"
let s:mask2="and some chars here"

syntax region MyOwnRegionName start=s:mask1 end=s:mask2

s:mask1(这个想法是在多个区域定义中使用变量。)

但那是行不通的。 Vim 报告以下错误:

E402: Garbage after pattern: s:mask1 end=s:mask2
E475: Invalid argument: bmlRecsOps start=s:mask1 end=s:mask2

我设法解决了这个问题:

execute 'syntax region MyOwnRegionName start=/'.s:mask1.'/ end=/'.s:mask2.'/'

但我不太明白它为什么以及如何工作。我不确定这是正确的方法。准备一个包含命令的字符串 - 它有问题。或者是吗?

答案1

Vim 的求值规则与常见编程语言中的规则不同。最多前命令不接受变量,但期望文字值。这使得以交互方式发出命令变得更加方便:不需要字符串引用。

在 Vimscript 中,正如您已经正确发现的那样,您需要使用:execute来将 Vimscript 变量评估到命令中。它评估所有参数,然后将结果字符串作为 Ex 命令执行。如果字符串连接太笨重,您还可以使用printf()将变量内容放入命令中。

相关内容