Đâ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 -R
trong Source
đó chứa OMU
thư mục để tạo tags
tập tin.
Tôi khởi chạy vim bằng cách sử dụng vim -u NONE -N
; .vimrc
và plugin bị vô hiệu hóa.
Chỉ có một mục nhập DpDetect
trong tags
tệp:
DpDetect OMU/src/boot/src/ChipBooter.cpp /^void ChipBooter::DpDetect()$/;" f class:ChipBooter
tags
là giá trị mặc định, vì .vimrc
bị 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ẻ : tags
và TAGS
.
:echo tagfiles()
['tags', 'TAGS']
Nếu tôi thay đổi tags
tù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à TAGS
tập tin? Chỉ có một tags
tập tin trong thư mục dự án của tôi.
$ find {My project root directory} -iname tags
./tags
tags
và TAGS
. Bạn có một TAGS
tậ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?
tags
tệp và sau đó yêu cầu TAGS
tệ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ì?