Eu quero criar um caminho include a partir de uma variável de ambiente em vim . Quero manter apenas as instâncias que terminam como /share/bin nessa variável e alterá-las para include . Eu quero fazer isso em .vimrc , por esse motivo eu usei a função vim substitute() .
Como teste, usarei esta variável:
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
O resultado desejado para este exemplo é:
TEST=/afs/test/include /afs/test2/include /afs/test3/include
Enquanto tentava alcançar esse resultado, fiquei com as duas perguntas a seguir:
Question1
Como estava com problemas para usar o método vim substitute() (explicado abaixo), abri um arquivo, digamos lala , com o mesmo texto da variável de ambiente $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
E usei o comando s/share\/bin:/include /g para obter:
/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
depois, usei o comando %s#\(/.*include\)\(.*\)##g , resultando:
/afs/test/include /afs/test2/include /afs/test/bin:/afs/test3/include
Mas quando eu faço no vim
:echo substitute(substitute($TEST,"share/bin:","include ","g"),"\(/.*include\)\(.*\)","","g")
Eu recebo:
/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
então, minha primeira pergunta é:
Por que substitute() não fornece o mesmo resultado ao usar substitute ?
Question2
E, finalmente, desejo remover todas as instâncias semelhantes a /afs/test/bin: de:
/afs/test/include /afs/test2/include /afs/test/bin:/afs/test3/include
, isto é, que não incluem nele. Eu estava tentando:
%s#\(/.\{-}include\)\@<=\(/| \)\{-}.\{-}:# #
Mas está combinando /afs/test2/include /afs/test/bin: e dando como resultado:
/afs/test/include /afs/test3/include
Como posso remover as instâncias de texto que não têm / share / bin?