Voici un fichier - ChipBooter.cpp
- dans mon projet (Omettez quelques détails qui ne sont pas liés à cette question):
class ChipBooter {
public:
void Boot() {
this->DpDetect();
}
void DpDetect() {}
}
Lorsque j'ai appuyé g<C-]>
pour passer à la définition de DpDetect
, Vim a affiché une liste avec des balises correspondantes en double:
# 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()
C'est la même définition!
Ce problème se produit chaque fois que je frappe g<C-]>
et double toujours la longueur de la liste.
Plus de détails
Version Exubérant Ctags: 5.8
. La version Vim est7.3
Voici une représentation visuelle de ma hiérarchie de répertoires:
Source
`---tags
|
`---OMU
`---src
`---boot
`---src
`---ChipBooter.cpp
J'ai couru ctags -R
dans Source
lequel contient le OMU
répertoire pour générer le tags
fichier.
Je lance vim en utilisant vim -u NONE -N
; .vimrc
et les plugins sont désactivés.
Il n'y a qu'une seule entrée DpDetect
dans le tags
fichier:
DpDetect OMU/src/boot/src/ChipBooter.cpp /^void ChipBooter::DpDetect()$/;" f class:ChipBooter
tags
est la valeur par défaut, car .vimrc
est désactivé.
:set tags?
tags=./tags,./TAGS,tags,TAGS
Mise à jour
@romainl a déclaré que Vim semble utiliser les deux fichiers de balises : tags
et TAGS
.
:echo tagfiles()
['tags', 'TAGS']
Si je change d' tags
option pour exclure le fichier TAGS ( :set tags=./tags,tags
), le problème des balises en double n'existe pas.
Où est le TAGS
dossier? Il n'y a qu'un tags
fichier dans mon répertoire de projet.
$ find {My project root directory} -iname tags
./tags
:echo tagfiles()
?tags
etTAGS
. Avez-vous unTAGS
fichier dans/home/yufeng/mount/svncode/omu/zycp/Source/
? Serait-ce un problème de sensibilité à la casse?tags
fichiers un fichier puis demander unTAGS
fichier. Un FS sensible à la casse répondrait oui aux deux questions, forçant Vim à rechercher deux fois dans le même fichier en pensant qu'il y en a deux, tandis qu'un FS insensible à la casse répondrait oui uniquement à la première question.Réponses:
Comme l'a dit @romainl, il s'agit bien d'un problème de sensibilité à la casse FS (système de fichiers).
Mon fichier de projet est monté de Windows 7 sur mon Fedora en utilisant:
Depuis la page de manuel mount.cifs :
Cela signifie que le montage préservera la sensibilité à la casse du serveur FS. Si le FS du serveur est sensible à la casse, ces fichiers montés seront sensibles à la casse; Si le FS du serveur est insensible à la casse, ils le seront.
Windows 7 ne respecte pas la casse, ce qui rend ces fichiers de projet insensibles à la casse.
Si l'option «tags» comprend à la fois des tags et des TAGS :
Vim recherchera le fichier de balises deux fois: une pour les balises , une autre pour les TAGS . Dans les deux cas, Vim constate qu'il y a une crise. Cela fait que Vim confond un même fichier de balises pour deux fichiers différents.
Par conséquent, Vim utilisera deux fichiers de balises:
Ainsi, un problème de balises en double s'est produit.
Si l'option «tags» inclut uniquement les tags :
Le problème n'existera pas.
la source