TAGS tệp chứa các định nghĩa
Một TAGS
tệp chứa danh sách các chức năng và lớp được xác định. Nó thường được đặt trong thư mục gốc của một dự án và trông giống như sau:
^L
configure,3945
as_fn_success () { as_fn_return 0; }^?as_fn_success^A180,5465
as_fn_failure () { as_fn_return 1; }^?as_fn_failure^A181,5502
as_fn_ret_success () { return 0; }^?as_fn_ret_success^A182,5539
as_fn_ret_failure () { return 1; }^?as_fn_ret_failure^A183,5574
Điều này cho phép Emacs tìm ra các định nghĩa. Điều hướng cơ bản được tích hợp sẵn find-tag
, nhưng etags-select
cung cấp giao diện người dùng đẹp hơn khi có nhiều kết quả trùng khớp.
Bạn cũng có thể sử dụng tệp TAGS để hoàn thành mã. Ví dụ: chương trình phụ trợ etags của công ty sử dụng tệp TAGS .
TAGS tệp có thể được tạo bằng các công cụ khác nhau
ctags
(trước đây được gọi là 'thẻ ctags phổ quát' hoặc 'thẻ ctags hoa lệ') có thể tạo tệp TAGS và hỗ trợ phạm vi ngôn ngữ rộng nhất. Nó được duy trì tích cực trên github.
Emacs cung cấp hai chương trình tạo tệp TAGS, được gọi là etags
và ctags
. Emacs ' ctags
chỉ etags
với giao diện CLI giống như thẻ ctags phổ biến. Để tránh nhầm lẫn, nhiều bản phân phối đổi tên các chương trình này (ví dụ ctags.emacs24
trên Debian).
Ngoài ra còn có các công cụ dành riêng cho ngôn ngữ để tạo tệp TAGS, chẳng hạn như jsctags
và hasktags
.
Các định dạng tệp khác
ebrowse
là một chương trình C được vận chuyển với Emacs. Nó lập chỉ mục mã C / C ++ và tạo một BROWSE
tệp. ebrowse.el cung cấp định nghĩa và hoàn thành tìm kiếm thông thường. Bạn cũng có thể mở BROWSE
tệp trực tiếp trong Emacs để có cái nhìn tổng quan về các lớp / hàm được xác định một cơ sở mã.
GNU toàn cầu có định dạng cơ sở dữ liệu riêng của mình, trong đó bao gồm một GTAGS
, GRTAGS
và GPATH
tập tin. Bạn có thể tạo các tệp này bằng gtags
lệnh phân tích mã C / C ++. Đối với các ngôn ngữ khác, GNU Global có thể đọc các tệp được tạo bởi thẻ ctags chung.
GNU Global cũng cung cấp giao diện CLI để đặt những câu hỏi phức tạp hơn, như 'biểu tượng này được đề cập ở đâu?'. Nó đi kèm với gói Emacs gtags.el, nhưng ggtags.el cũng rất phổ biến để truy cập cơ sở dữ liệu GNU Global.
Cscope cũng tương tự như GNU Global: nó phân tích cú pháp C / C ++ thành định dạng cơ sở dữ liệu riêng. Nó cũng có thể trả lời các câu hỏi như 'tìm tất cả người gọi / người gọi của funciton này'.
Xem thêm phần thảo luận HN này so sánh global và cscope .
Dự án Máy khách / Máy chủ
rtags phân tích cú pháp và lập chỉ mục C / C ++ bằng máy chủ liên tục. Nó sử dụng trình phân tích cú pháp clang, vì vậy nó xử lý C ++ thực sự tốt. Nó đi kèm với một gói Emacs để truy vấn máy chủ.
google-gtags là một dự án trong đó tệp TAGS lớn sẽ được lưu trữ trên máy chủ. Khi bạn truy vấn máy chủ, nó sẽ cung cấp một tập hợp con của tệp TAGS có liên quan đến tìm kiếm của bạn.
Ngữ nghĩa (CEDET)
Semantic là một gói Emacs tích hợp có chứa trình phân tích cú pháp cho C / C ++, vì vậy nó cũng có thể tìm thấy các định nghĩa. Nó cũng có thể nhập dữ liệu từ tệp TAGS, cơ sở dữ liệu csope và các nguồn khác. CEDET cũng bao gồm chức năng kiểu IDE sử dụng dữ liệu này, ví dụ như tạo sơ đồ UML của các cấu trúc phân cấp lớp.
GTags
dự án bạn liên kết đến khá chết. Nếu ai đó đang nói vềgtags
, có lẽ họ đang đề cập đến GNU Global.