Попробуйте :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"
Возможно, вы можете переработать свой сценарий так подстановочные расширены, прежде чем они будут объединены с другими строками. В качестве альтернативы вы можете попытаться разделить конкатенированную строку, развернуть подстановочные знаки, а затем повторить конкатенацию.
Думаю, что сам. В этом случае мне придется реорганизовать много кода, потому что строка генерируется динамически с помощью другой функции vim. Есть ли способ сделать это вообще? –