Aqui está um arquivo - ChipBooter.cpp
- no meu projeto (Omita alguns detalhes que não estão relacionados a esta pergunta):
class ChipBooter {
public:
void Boot() {
this->DpDetect();
}
void DpDetect() {}
}
Quando pressionei g<C-]>
para ir para a definição de DpDetect
, o Vim exibiu uma lista com tags correspondentes duplicadas:
# pri kind tag file
1 F C f DpDetect OMU/src/boot/src/ChipBooter.cpp
class:ChipBooter
void ChipBooter::DpDetect()
2 F C f DpDetect OMU/src/boot/src/ChipBooter.cpp
class:ChipBooter
void ChipBooter::DpDetect()
Esta é a mesma definição!
Esse problema ocorre toda vez que eu clico g<C-]>
e sempre dobra o comprimento da lista.
Mais detalhes
Versão exuberante Ctags: 5.8
. A versão do Vim é7.3
Aqui está uma representação visual da minha hierarquia de diretórios:
Source
`---tags
|
`---OMU
`---src
`---boot
`---src
`---ChipBooter.cpp
Eu corri ctags -R
em Source
que contém o OMU
diretório para gerar o tags
arquivo.
Eu inicio o vim usando vim -u NONE -N
; .vimrc
e plug-ins está desativado.
Há apenas uma entrada DpDetect
no tags
arquivo:
DpDetect OMU/src/boot/src/ChipBooter.cpp /^void ChipBooter::DpDetect()$/;" f class:ChipBooter
tags
é o valor padrão, porque .vimrc
está desativado.
:set tags?
tags=./tags,./TAGS,tags,TAGS
Atualizar
@romainl disse que o Vim parece estar usando os dois arquivos de tags : tags
e TAGS
.
:echo tagfiles()
['tags', 'TAGS']
Se eu mudar a tags
opção de excluir o arquivo TAGS ( :set tags=./tags,tags
), o problema de tags duplicadas não existe.
Onde está o TAGS
arquivo? Existe apenas um tags
arquivo no diretório do meu projeto.
$ find {My project root directory} -iname tags
./tags
:echo tagfiles()
?tags
eTAGS
. Você tem umTAGS
arquivo/home/yufeng/mount/svncode/omu/zycp/Source/
? Poderia ser um problema de distinção entre maiúsculas e minúsculas?tags
arquivos e depois pedindo umTAGS
arquivo. Um FS que diferencia maiúsculas de minúsculas responderia sim a ambas as perguntas, forçando o Vim a procurar duas vezes no mesmo arquivo, pensando que existem duas, enquanto um FS que não diferencia maiúsculas de minúsculas responderia sim apenas à primeira pergunta.Respostas:
Como o @romainl disse, é realmente um problema de diferenciação de maiúsculas e minúsculas do FS (sistema de arquivos).
Meu arquivo de projeto é montado da Janela 7 para o meu Fedora usando:
Na página do manual mount.cifs :
Isso significa que o Mount preservará a distinção entre maiúsculas e minúsculas do servidor FS. Se o FS do servidor faz distinção entre maiúsculas e minúsculas, esses arquivos montados diferenciam maiúsculas de minúsculas; Se o FS do servidor não diferencia maiúsculas de minúsculas, ele não diferencia maiúsculas de minúsculas.
O Windows 7 não diferencia maiúsculas de minúsculas, o que torna esses arquivos de projeto que não diferenciam maiúsculas de minúsculas.
Se a opção "tags" incluir tags e TAGS :
O Vim pesquisará o arquivo de tags duas vezes: um para tags e outro para TAGS . Nos dois momentos, o Vim descobre que há um encaixe. Isso faz com que o Vim confunda um mesmo arquivo de tags com dois arquivos diferentes.
Conseqüentemente, o Vim usará dois arquivos de tags:
Assim, ocorreu um problema com tags duplicadas.
Se a opção "tags" incluir apenas tags :
O problema não existirá.
fonte