2009-11-22 3 views
0

Там является ВИМ переменной со значением строки следующим образом:Вим Сценарий: расширить групповые символы в строке

foo%:p:r:sbar 

%: р: г: ы является ВИМ групповой символ.

Как я могу развернуть все подстановочные знаки в строковой переменной?

К сожалению, расширение (my_variable) не помогает. Нужно ли указывать какой-либо дополнительный аргумент или использовать другую функцию vim?

Спасибо.

ответ

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" 

Возможно, вы можете переработать свой сценарий так подстановочные расширены, прежде чем они будут объединены с другими строками. В качестве альтернативы вы можете попытаться разделить конкатенированную строку, развернуть подстановочные знаки, а затем повторить конкатенацию.

+0

Думаю, что сам. В этом случае мне придется реорганизовать много кода, потому что строка генерируется динамически с помощью другой функции vim. Есть ли способ сделать это вообще? –

1

Что относительно join(map(split(mystring, '\ze[<%#]'), 'expand(v:val)'), '') ?

Смежные вопросы