ctags – Etiquetas exuberantes: problema de etiquetas duplicadas

Pregunta:

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 DpDetect 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 de Ctags: 5.8 . La versión de Vim es 7.3

Aquí hay una representación visual de mi jerarquía de directorios:

Source
  `---tags
  |       
  `---OMU
       `---src
            `---boot
                 `---src
                      `---ChipBooter.cpp

ctags -R en Source que contiene el directorio OMU para generar el archivo de tags .

Lanzo vim usando vim -u NONE -N ; .vimrc y los complementos están deshabilitados.

Solo hay una entrada sobre DpDetect en el archivo de tags :

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 Vim parece estar usando ambos dos archivos de etiquetas: tags y TAGS .

:echo tagfiles()
['tags', 'TAGS']

Si cambio la opción de tags para excluir el archivo TAGS ( :set tags=./tags,tags ), el problema de las etiquetas duplicadas no existe.

¿Dónde está el archivo TAGS ? Solo hay un archivo de tags en el directorio de mi proyecto.

$ find {My project root directory} -iname tags
./tags

Respuesta:

Como dijo @romainl, de hecho es un problema de distinción entre mayúsculas y minúsculas del FS (sistema de archivos).

Mi archivo de proyecto se monta desde Windows 7 a mi Fedora usando:

mount {Windows 7 Dir} {Fedora Dir} /local_folder -t cifs -o username=xxxx,password=xxxx

Desde la página de manual de mount.cifs :

sensible a mayúsculas y minúsculas es el valor predeterminado si el servidor lo admite.

Significa que Mount conservará 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 distinguirán entre mayúsculas y minúsculas; Si el FS del servidor no distingue entre mayúsculas y minúsculas, no distingue entre mayúsculas y minúsculas.

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.

$ cd {My project root directory}
$ ls tags
tags
$ ls TAGS
TAGS

Si la opción 'etiquetas' incluye tanto etiquetas como TAGS :

:set tags=tags,TAGS

Vim buscará el archivo de etiquetas dos veces: una para etiquetas , otra para TAGS . En ambos momentos, Vim encuentra que hay uno que encaja. Esto hace que Vim confunda un mismo archivo de etiquetas con dos archivos diferentes.

En consecuencia, Vim utilizará dos archivos de etiquetas:

:echo tagfiles()
['tags', 'TAGS']

Por lo tanto, ocurrió un problema de etiquetas duplicadas.

Si la opción 'etiquetas' incluye solo etiquetas :

:set tags=tags

El problema no existirá.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım