indicizzazione
Si potrebbe desiderare di utilizzare GNU/global invece di ctags: supporta C++ ed è, a mio parere più efficiente con i grandi progetti (soprattutto perché è possibile aggiornare l'indice invece di ricostruire da zero). Ed è ancora molto più semplice usare CEDET/Semantic (che è anche uno strumento fantastico se si impiega il tempo necessario per configurarlo).
uso Esempio:
$ 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)
In Emacs, attivare gtags-mode
nei buffer di codice sorgente per ottenere l'accesso ai comandi gtags:
gtags-find-tag
(M-.): Trovare la definizione del tag specificato nei file di origine (gtags
consente di scegliere tra tutte le definizioni possibili se ce ne sono diverse o salta direttamente se esiste una sola possibilità)
gtags-pop-stack
(M- *): ritorno alla posizione precedente
gtags-find-rtag
: trovare tutti gli usi del tag specificato nei file di origine
Qui di seguito è la mia configurazione per gtags
, che si attiva automaticamente se gtags-mode
un indice viene trovato:
;; 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)
Completamento automatico
Non conosco nessuno strumento migliore di auto-complete
. Anche se non è incluso in Emacs, è molto facile da installare utilizzando il sistema di packaging (ad esempio nei repository marmalade o melpa).
Potresti voler controllare GNU global plus xgtags.el e clang basato sul completamento automatico. Semantic può fare uso di entrambi. – Arne
Check out clang per il completamento automatico C++: http://root42.blogspot.hu/2012/07/nice-c-autocomplete-configuration-for.html – Tom
Attualmente sto sviluppando ['clang-tags'] (https://github.com/ffevotte/clang-tags), uno strumento di indicizzazione basato su clang. È ancora nelle prime fasi dello sviluppo, ma potresti trovarlo utilizzabile. Se lo provi, sarei molto contento di ricevere un feedback su github. – Francesco