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?