Я хочу построить путь include из переменной окружения на vim . Я хочу сохранить только экземпляры, которые оканчиваются как /share/bin на эту переменную, и изменить их, чтобы include . Я хочу сделать это на .vimrc , по этой причине я использовал функцию vim substitute() .
В качестве теста я буду использовать эту переменную:
export TEST=/afs/test/share/bin:/afs/test2/share/bin:/afs/test/bin:/afs/test3/share/bin:/cvmfs/x86_64-slc6-gcc47-opt/share:/cvmfs/x86_64-slc6-gcc47-opt/bin
Желаемый результат для этого примера:
TEST=/afs/test/include /afs/test2/include /afs/test3/include
Пытаясь достичь этого результата, я застрял в следующих двух вопросах:
Вопрос 1
Поскольку у меня возникли проблемы с использованием метода vim substitute() (объясняется ниже), я открыл файл, скажем lala , с тем же текстом из переменной среды $TEST :
/afs/test/share/bin:/afs/test2/share/bin:/afs/test/bin:/afs/test3/share/bin:/cvmfs/x86_64-slc6-gcc47-opt/share:/cvmfs/x86_64-slc6-gcc47-opt/bin
И использовал команду s/share\/bin:/include /g чтобы получить:
/afs/test/include /afs/test2/include /afs/test/bin:/afs/test3/include /cvmfs/x86_64-slc6-gcc47-opt/share:/cvmfs/x86_64-slc6-gcc47-opt/bin
после этого я использовал команду %s#\(/.*include\)\(.*\)#\1#g , в результате чего:
/afs/test/include /afs/test2/include /afs/test/bin:/afs/test3/include
Но когда я делаю на VIM
:echo substitute(substitute($TEST,"share/bin:","include ","g"),"\(/.*include\)\(.*\)","\1","g")
Я получил:
/afs/test/include /afs/test2/include /afs/test/bin:/afs/test3/include /cvmfs/x86_64-slc6-gcc47-opt/share:/cvmfs/x86_64-slc6-gcc47-opt/bin
Итак, мой первый вопрос:
Почему substitute() дает тот же результат при использовании substitute?
Вопрос 2
И, наконец, я хочу удалить все экземпляры, похожие на /afs/test/bin: from:
/afs/test/include /afs/test2/include /afs/test/bin:/afs/test3/include
то есть, которые не имеют на нем включения. Я пытался:
%s#\(/.\{-}include\)\@<=\(/| \)\{-}.\{-}:# #
Но это соответствует /afs/test2/include /afs/test/bin: и дает в результате:
/afs/test/include /afs/test3/include
Как я могу удалить те текстовые экземпляры, которые не имели /share /bin?
