Vim脚本:在字符串中展开通配符

时间:2009-11-22 17:05:20

标签: vim wildcard

有一个带有字符串值的vim变量,如下所示:

foo%:p:r:sbar

%:p:r:s是一个vim通配符。

如何展开字符串变量中的所有通配符?

不幸的是,扩展(my_variable)无济于事。 我是否需要指定任何其他参数或使用其他vim函数?

感谢。

2 个答案:

答案 0 :(得分:2)

尝试:help expand()

这部分文档似乎与您特别相关:

            Modifiers:
                    :p              expand to full path
                    :h              head (last path component removed)
                    :t              tail (last path component only)
                    :r              root (one extension removed)
                    :e              extension only

            Example: >
                    :let &tags = expand("%:p:h") . "/tags"
            Note that when expanding a string that starts with '%', '#' or
            '<', any following text is ignored.  This does NOT work: >
                    :let doesntwork = expand("%:h.bak")
            Use this: >
                    :let doeswork = expand("%:h") . ".bak"

看起来您的尾随(可能是领先的)字符串不适用于expand()

这确实有效:

:echo "foo" . expand("%:p:r:s") . "bar"

可能你可以重写你的脚本,所以在将通配符与其他字符串组合之前进行扩展。或者,您可以尝试拆分连接字符串,展开通配符,然后重新连接。

答案 1 :(得分:1)

怎么样? join(map(split(mystring, '\ze[<%#]'), 'expand(v:val)'), '')