![vim 语法区域:如何使用字符串作为开始/结束模式?](https://linux22.com/image/3620/vim%20%E8%AF%AD%E6%B3%95%E5%8C%BA%E5%9F%9F%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%BD%9C%E4%B8%BA%E5%BC%80%E5%A7%8B%2F%E7%BB%93%E6%9D%9F%E6%A8%A1%E5%BC%8F%EF%BC%9F.png)
我想在我的语法文件之一中添加类似的内容:
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()
将变量内容放入命令中。