Indexing
Bạn có thể muốn sử dụng GNU/global thay vì ctags: nó hỗ trợ C++ và là theo ý kiến của tôi hiệu quả hơn với các dự án lớn (đặc biệt là kể từ khi bạn có thể cập nhật các chỉ số thay vì xây dựng lại nó từ đầu). Và nó vẫn đơn giản hơn rất nhiều khi sử dụng CEDET/Semantic (đó cũng là một công cụ tuyệt vời nếu bạn dành thời gian để thiết lập nó).
Ví dụ sử dụng:
$ cd sources
$ gtags -v # create the index
$ cd subdirectory
$ [hack hack hack]
$ global -u # update the index (can be called from anywhere in the project)
Trong Emacs, kích hoạt gtags-mode
trong bộ đệm mã nguồn để có được quyền truy cập vào các gtags lệnh:
gtags-find-tag
(M.): Tìm định nghĩa của thẻ được chỉ định trong các tệp nguồn của bạn (gtags
cho phép bạn chọn giữa tất cả các định nghĩa có thể nếu có một số hoặc nhảy trực tiếp nếu chỉ có một khả năng)
gtags-pop-stack
(M *): trở lại vị trí trước
gtags-find-rtag
: tìm tất cả các công dụng của thẻ được quy định trong các tập tin nguồn
Dưới đây là cấu hình của tôi cho gtags
, mà tự động kích hoạt gtags-mode
nếu một chỉ số được tìm thấy:
;; gtags-mode
(eval-after-load "gtags"
'(progn
(define-key gtags-mode-map (kbd "M-,") 'gtags-find-rtag)))
(defun ff/turn-on-gtags()
"Turn `gtags-mode' on if a global tags file has been generated.
This function asynchronously runs 'global -u' to update global
tags. When the command successfully returns, `gtags-mode' is
turned on."
(interactive)
(let ((process (start-process "global -u"
"*global output*"
"global" "-u"))
(buffer (current-buffer)))
(set-process-sentinel
process
`(lambda (process event)
(when (and (eq (process-status process) 'exit)
(eq (process-exit-status process) 0))
(with-current-buffer ,buffer
(message "Activating gtags-mode")
(gtags-mode 1)))))))
(add-hook 'c-mode-common-hook 'ff/turn-on-gtags)
Hoàn thành tự động
Tôi không biết bất kỳ công cụ nào tốt hơn auto-complete
. Ngay cả khi nó không được bao gồm trong Emacs, nó rất dễ dàng cài đặt bằng cách sử dụng hệ thống đóng gói (ví dụ trong các kho marmalade hoặc melpa).
Bạn có thể muốn kiểm tra GNU global plus xgtags.el và clang dựa trên auto-complete. Ngữ nghĩa cũng có thể sử dụng cả hai. – Arne
Kiểm tra clang để tự động hoàn thành C++: http://root42.blogspot.hu/2012/07/nice-c-autocomplete-configuration-for.html – Tom
Tôi hiện đang phát triển ['clang-tags'] (https://github.com/ffevotte/clang-tags), một công cụ lập chỉ mục dựa trên clang. Nó vẫn còn trong giai đoạn đầu của sự phát triển, nhưng bạn có thể thấy nó có thể sử dụng được. Nếu bạn thử nó, tôi sẽ rất vui khi nhận được một số phản hồi về github. – Francesco