我使用:set makeprg
功能根据文件设置不同的make行为。这样做的一个特点是我可以使用%
和%<
来引用活动缓冲区中的文件,以及$
来查找环境变量。
我想回应扩展的 makeprg
变量,但我似乎无法实现这一点。
例如,假设我有:set makeprg=build\ %
,我正在处理文件Foo.txt
。
我希望回显扩展makeprg
的输出为:
build Foo.txt
但是,在回显&makeprg
变量时,我们得到以下结果:
:echo(&makeprg)
build\ %
解决方案可能涉及使用expand()
,除了这将涉及解析转义符号的&makeprg
并适当处理环境变量$
。我有什么解决方案吗?
答案 0 :(得分:1)
你为什么需要这个?对于问题排查,我可能只需将echo
附加到'makeprg'
(这是\
之后的尾随空格):
:setl makeprg^=echo\
但是以下应该做你想到的。诀窍是将'makeprg'
字符串拆分为空格,并单独处理每个单词:
:echo join(map(split(&makeprg), 'expand(v:val)'))
答案 1 :(得分:0)
更接近事实:
join(map(split(mystring, '\ze[<%#]'), 'expand(v:val)'), '')
。