Đây là một tệp - ChipBooter.cpp- trong dự án của tôi (Bỏ qua một số chi tiết không liên quan đến câu hỏi này):
class ChipBooter {
public:
void Boot() {
this->DpDetect();
}
void DpDetect() {}
}
Khi tôi nhấn g<C-]>để chuyển sang định nghĩa DpDetect, Vim hiển thị một danh sách với các thẻ trùng khớp:
# 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()
Đây là định nghĩa tương tự!
Vấn đề này xảy ra mỗi khi tôi nhấn g<C-]>và luôn nhân đôi độ dài của danh sách.
Thêm chi tiết
Phiên bản Ctags quá khích : 5.8. Phiên bản Vim là7.3
Đây là một đại diện trực quan của hệ thống phân cấp thư mục của tôi:
Source
`---tags
|
`---OMU
`---src
`---boot
`---src
`---ChipBooter.cpp
Tôi chạy ctags -Rtrong Sourceđó chứa OMUthư mục để tạo tagstập tin.
Tôi khởi chạy vim bằng cách sử dụng vim -u NONE -N; .vimrcvà plugin bị vô hiệu hóa.
Chỉ có một mục nhập DpDetecttrong tagstệp:
DpDetect OMU/src/boot/src/ChipBooter.cpp /^void ChipBooter::DpDetect()$/;" f class:ChipBooter
tagslà giá trị mặc định, vì .vimrcbị vô hiệu hóa.
:set tags?
tags=./tags,./TAGS,tags,TAGS
Cập nhật
@romainl cho biết Vim dường như đang sử dụng cả hai tệp thẻ : tagsvà TAGS.
:echo tagfiles()
['tags', 'TAGS']
Nếu tôi thay đổi tagstùy chọn để loại trừ tệp TAGS ( :set tags=./tags,tags), vấn đề về thẻ trùng lặp sẽ không tồn tại.
Đâu là TAGStập tin? Chỉ có một tagstập tin trong thư mục dự án của tôi.
$ find {My project root directory} -iname tags
./tags
tagsvà TAGS. Bạn có một TAGStập tin trong /home/yufeng/mount/svncode/omu/zycp/Source/? Nó có thể là một vấn đề nhạy cảm trường hợp?
tagstệp và sau đó yêu cầu TAGStệp. Một FS phân biệt chữ hoa chữ thường sẽ trả lời có cho cả hai câu hỏi, buộc Vim phải tìm kiếm hai lần trong cùng một tệp với suy nghĩ có hai, trong khi một FS không phân biệt chữ hoa chữ thường chỉ trả lời có cho câu hỏi đầu tiên.
:echo tagfiles()gì?