Aquí hay un archivo - ChipBooter.cpp
en mi proyecto (omita algunos detalles que no están relacionados con esta pregunta):
class ChipBooter {
public:
void Boot() {
this->DpDetect();
}
void DpDetect() {}
}
Cuando presioné g<C-]>
para saltar a la definición de DpDetect
, Vim mostró una lista con etiquetas coincidentes 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 es la misma definición!
Este problema ocurre cada vez que presiono g<C-]>
y siempre duplica la longitud de la lista.
Más detalles
Versión exuberante Ctags: 5.8
. La versión de Vim es7.3
Aquí hay una representación visual de mi jerarquía de directorios:
Source
`---tags
|
`---OMU
`---src
`---boot
`---src
`---ChipBooter.cpp
Corrí ctags -R
en el Source
que contiene el OMU
directorio para generar el tags
archivo.
Lanzo vim usando vim -u NONE -N
; .vimrc
y los complementos están deshabilitados.
Solo hay una entrada DpDetect
en el tags
archivo:
DpDetect OMU/src/boot/src/ChipBooter.cpp /^void ChipBooter::DpDetect()$/;" f class:ChipBooter
tags
es el valor predeterminado, porque .vimrc
está deshabilitado.
:set tags?
tags=./tags,./TAGS,tags,TAGS
Actualizar
@romainl dijo que Vim parece estar usando ambos archivos de etiquetas : tags
y TAGS
.
:echo tagfiles()
['tags', 'TAGS']
Si cambio la tags
opción para excluir el archivo TAGS ( :set tags=./tags,tags
), el problema de etiquetas duplicadas no existe.
¿Dónde está el TAGS
archivo? Solo hay un tags
archivo en el directorio de mi proyecto.
$ find {My project root directory} -iname tags
./tags
:echo tagfiles()
?tags
yTAGS
. ¿Tienes unTAGS
archivo/home/yufeng/mount/svncode/omu/zycp/Source/
? ¿Podría ser un problema de mayúsculas y minúsculas?tags
archivos y luego pidiéndoloTAGS
. Un FS sensible a mayúsculas y minúsculas respondería sí a ambas preguntas, obligando a Vim a buscar dos veces en el mismo archivo pensando que hay dos, mientras que un FS insensible a mayúsculas y minúsculas respondería sí solo a la primera pregunta.Respuestas:
Como dijo @romainl, de hecho es un problema de mayúsculas y minúsculas FS (sistema de archivos).
Mi archivo de proyecto se monta desde Windows 7 a mi Fedora usando:
Desde la página de manual de mount.cifs :
Significa que el Mount preservará la distinción entre mayúsculas y minúsculas del servidor FS. Si el FS del servidor distingue entre mayúsculas y minúsculas, estos archivos montados serán sensibles a mayúsculas y minúsculas; Si el FS del servidor no distingue entre mayúsculas y minúsculas, no lo hará.
Windows 7 no distingue entre mayúsculas y minúsculas, lo que hace que estos archivos de proyecto no distingan entre mayúsculas y minúsculas.
Si la opción 'etiquetas' incluye tanto etiquetas como TAGS :
Vim buscará el archivo de etiquetas dos veces: una para etiquetas , otra para TAGS . En ambos tiempos, Vim descubre que hay uno que se ajusta. Esto hace que Vim confunda un mismo archivo de etiquetas con dos archivos diferentes.
En consecuencia, Vim usará dos archivos de etiquetas:
Por lo tanto, el problema de etiquetas duplicadas sucedió.
Si la opción 'etiquetas' solo incluye etiquetas :
El problema no existirá.
fuente