2011-10-12 4 views
20

Tôi có thư mục llvm2.9 trong đó tôi chạy lệnh này.Vim và Ctags: Bỏ qua một số tệp nhất định khi tạo thẻ

$> ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ 

Đây là các phương pháp lập chỉ mục trong tệp * .html có trong llvm2.9/docs. Tôi tìm thấy điều này bởi vì khi tôi nhấn ctrl-] cho một số lớp, nó đã đi đến tập tin html.

Làm cách nào để buộc ctags chỉ sử dụng các tệp .cpp/.h hoặc bỏ qua một thư mục cụ thể.

Cảm ơn

+0

có vẻ như 80% vấn đề là do _for the language_ to cpp. Tại sao bạn làm điều đó? – sehe

+0

Nếu không, việc nhấp vào định nghĩa hàm nhất định sẽ đưa tôi đến tệp html nơi tệp được liệt kê thay vì tệp cpp. – excray

+0

Bạn có chắc chắn không? tôi đoán là việc xử lý các tệp html _without_ '--language-force = C++' sẽ _not_ nhận các định nghĩa C++ bên trong HTML ở vị trí đầu tiên. Bạn đã xác minh điều đó chưa? Ngoài ra, tôi đoán bạn đã nhìn thấy câu trả lời của tôi (tôi hiểu câu hỏi, tôi chỉ muốn thử thách tiền đề một chút quá) – sehe

Trả lời

17

Bạn có thể loại trừ một filetype sử dụng --exclude=*.html

+0

(điều này làm việc cho ctags exeburant, không chắc chắn về các chương trình thẻ thường xuyên) – skeept

+3

và những gì về nhiều loại? Được phân tách bằng dấu phẩy? – eddy147

3

Cách đơn giản nhất trong vim sẽ

:!ctags {.,**}/*.{cpp,h} 

Giải thích: Các dấu ngoặc mở rộng để

:!ctags ./*.cpp **/*.cpp **/*.h **/*.h 

Vì vậy, nó sẽ tìm kiếm nguồn hoặc tiêu đề tập tin trong thư mục hiện tại (./) hoặc bất kỳ thư mục lồng nhau nào ()). Lưu ý **/ sẽ không phù hợp với thư mục hiện hành (nó luôn luôn phù hợp với ít nhất 1 phụ cấp độ thư mục)

Trong vỏ:

find -iname '*.cpp' -o '*.h' -print0 | xargs -0 ctags 

Giải thích: Đây đệ quy tìm tất cả cpp và. h tệp trong thư mục hiện tại và chuyển chúng đến ctags trên dòng lệnh.

Cách print0-0 làm việc cùng nhau là để đảm bảo nó hoạt động một cách chính xác với tên tập tin lạ (ví dụ có chứa khoảng trắng hoặc thậm chí ký tự dòng mới)

Tôi sẽ để lại phần còn lại của các tùy chọn ctags cho trí tưởng tượng của riêng bạn :)

PS. Đối với bash-es gần đây, bạn có thể sử dụng

shopt -s globstar 
ctags {.,**}/*.{cpp,h} 

và nhận được nhiều hành vi tương tự như trong vim!

+0

Bạn có thể giải thích những gì đang xảy ra với mỗi lệnh này không? –

+0

@ still_dreaming_1 Tôi nghĩ vậy. Xem cập nhật – sehe

12

Nếu bạn cần loại trừ hơn hỗ trợ file .html:

Bạn không thể dấu phẩy tách một danh sách bên trong một tùy chọn loại trừ.Điều này không làm việc:

ctags --exclude=*.html,*.js ./* 

Tuy nhiên, bạn có thể vượt qua nhiều loại trừ lựa chọn:

ctags --exclude=*.html --exclude=*.js ./* 

Vượt qua -V tùy chọn nhằm giúp gỡ rối:

ctags -V --exclude=*.html --exclude=*.js ./* 

Cung cấp đầu ra:

Reading initial options from command line 
    Option: --exclude=*.html 
    adding exclude pattern: *.html 
    Option: --exclude=*.js 
    adding exclude pattern: *.js 
+0

Trích dẫn các mẫu loại trừ của bạn để tránh việc mở rộng vỏ. – Walf

1

Tôi không muốn theo dõi từng loại tệp có thể được xử lý trong một dự án lớn và tôi chỉ quan tâm đến Python, vì vậy tôi chỉ xử lý tệp python một cách rõ ràng bằng cách sử dụng ctags --languages=Python .... Danh sách các tên ngôn ngữ có thể được nhìn thấy bằng cách sử dụng ctags --list-languages.