Hier ist eine Datei - ChipBooter.cpp
- in meinem Projekt (einige Details weglassen, die nicht mit dieser Frage zusammenhängen):
class ChipBooter {
public:
void Boot() {
this->DpDetect();
}
void DpDetect() {}
}
Als ich drückte g<C-]>
, um zur Definition von zu springen DpDetect
, zeigte Vim eine Liste mit doppelten übereinstimmenden Tags an:
# 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()
Dies ist die gleiche Definition!
Dieses Problem tritt jedes Mal auf, wenn ich treffe, g<C-]>
und verdoppelt immer die Länge der Liste.
Mehr Details
Üppige Ctags-Version : 5.8
. Vim-Version ist7.3
Hier ist eine visuelle Darstellung meiner Verzeichnishierarchie:
Source
`---tags
|
`---OMU
`---src
`---boot
`---src
`---ChipBooter.cpp
Ich lief ctags -R
in Source
dem das OMU
Verzeichnis zum Generieren der tags
Datei enthält.
Ich starte vim mit vim -u NONE -N
; .vimrc
und Plugins ist deaktiviert.
Es gibt nur einen Eintrag DpDetect
in der tags
Datei:
DpDetect OMU/src/boot/src/ChipBooter.cpp /^void ChipBooter::DpDetect()$/;" f class:ChipBooter
tags
ist der Standardwert, da .vimrc
deaktiviert ist.
:set tags?
tags=./tags,./TAGS,tags,TAGS
Aktualisieren
@romainl sagte, Vim scheint beide zwei Tags- Dateien zu verwenden: tags
und TAGS
.
:echo tagfiles()
['tags', 'TAGS']
Wenn ich die tags
Option zum Ausschließen der TAGS- Datei ( :set tags=./tags,tags
) ändere , besteht kein Problem mit doppelten Tags.
Wo ist die TAGS
Datei? tags
In meinem Projektverzeichnis befindet sich nur eine Datei.
$ find {My project root directory} -iname tags
./tags
:echo tagfiles()
?tags
undTAGS
. Haben Sie eineTAGS
Datei in/home/yufeng/mount/svncode/omu/zycp/Source/
? Könnte es sich um ein Problem mit der Groß- und Kleinschreibung handeln?tags
Datei fragt und dann nach einerTAGS
Datei. Ein FS mit Groß- und Kleinschreibung würde beide Fragen mit Ja beantworten und Vim dazu zwingen, zweimal in derselben Datei zu suchen, wobei angenommen wird, dass es zwei gibt, während ein FS ohne Berücksichtigung der Groß- und Kleinschreibung nur die erste Frage mit Ja beantworten würde.Antworten:
Wie @romainl sagte, handelt es sich in der Tat um ein FS-Problem (Dateisystem), bei dem die Groß- und Kleinschreibung beachtet wird.
Meine Projektdatei wird von Windows 7 auf meinem Fedora bereitgestellt, indem ich:
Auf der Manpage mount.cifs :
Dies bedeutet, dass der Mount die Groß- und Kleinschreibung des Server-FS beibehält. Wenn beim FS des Servers zwischen Groß- und Kleinschreibung unterschieden wird, wird bei diesen bereitgestellten Dateien zwischen Groß- und Kleinschreibung unterschieden. Wenn der FS des Servers die Groß- und Kleinschreibung nicht berücksichtigt, wird die Groß- und Kleinschreibung nicht berücksichtigt.
Windows 7 unterscheidet nicht zwischen Groß- und Kleinschreibung, wodurch bei diesen Projektdateien die Groß- und Kleinschreibung nicht berücksichtigt wird.
Wenn die Option "Tags" sowohl Tags als auch TAGS enthält :
Vim durchsucht die Tags-Datei zweimal: eine nach Tags , eine andere nach TAGS . In beiden Fällen stellt Vim fest, dass es eine Passform gibt. Dadurch verwechselt Vim dieselbe Tag- Datei mit zwei verschiedenen Dateien.
Folglich verwendet Vim zwei Tag-Dateien:
Somit ist ein Problem mit doppelten Tags aufgetreten.
Wenn die Option "Tags" nur Tags enthält :
Das Problem wird nicht existieren.
quelle