Here is a file -- ChipBooter.cpp -- in my project(Omit some details that are not related to this question):class ChipBooter {public:       void Boot() {        this->DpDetect();    }    void DpDetect() {}}When I hit g<C-]> to jump to the definition of DpDetect, Vim displayed a list with duplicate matching tags:# pri kind tag               file1 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()This is the same definition! This problem happens every time I hit g<C-]> and always doubles the length of the list. More DetailsExuberant Ctags version: 5.8. Vim version is 7.3Here is a visual representation of my directory hierarchy:Source  `---tags  |         `---OMU       `---src            `---boot                 `---src                      `---ChipBooter.cppI ran ctags -R in Source which contains the OMU directory to generate the tags file.I launch vim using vim -u NONE -N; .vimrc and plugins is disabled.There is only one entry about DpDetect in the tags file:DpDetect    OMU/src/boot/src/ChipBooter.cpp /^void ChipBooter::DpDetect()$/;   f   class:ChipBootertags is default value, because .vimrc is disabled.:set tags?tags=./tags,./TAGS,tags,TAGSUpdate@romainl said Vim seems to be using both two tags files: tags and TAGS. :echo tagfiles()['tags', 'TAGS']If I change tags option to exclude TAGS file(:set tags=./tags,tags), duplicate tags problem does not exist.Where is the TAGS file? There is only a tags file in my project directory.$ find {My project root directory} -iname tags./tags
Exuberant Ctags - Duplicate tags problem
ctags
As @romainl said, It is indeed an FS(file system) case-sensitivity issue.My project file is mounted from Window 7 to my Fedora using:mount {Windows 7 Dir} {Fedora Dir} /local_folder -t cifs -o username=xxxx,password=xxxxFrom the mount.cifs man page:case sensitive is the default if the server supports it.It means that the Mount will preserve the case-sensitivity of the server FS. If the server's FS is case-sensitive, these mounted files will be case-sensitive; If the server's FS is case-insensitive, they will be case-insensitive.Windows 7 is case-insensitive, which makes these project files case-insensitive.$ cd {My project root directory}$ ls tagstags$ ls TAGSTAGSIf 'tags' option includes both tags and TAGS::set tags=tags,TAGSVim will search the tags file twice: one for tags, another for TAGS. In both times, Vim finds that there is one fits. This makes Vim mistake one same tags file for two different files. Consequently, Vim will use two tags files:  :echo tagfiles()['tags', 'TAGS']Thus, duplicate tags problem happened.If 'tags' option includes only tags::set tags=tagsThe problem will not exist.