TLDR: Ich habe eine große Tag-Datei, die mehrmals pro Sitzung geladen wird, wodurch sie unbrauchbar wird. Die Ursache des Problems oder die Deaktivierung können nicht gefunden werden. Das Hauptziel besteht darin, zu Tags zu springen, aber die Fertigstellung wäre schön
Ich habe kürzlich auf dem Emacs-Subreddit gepostet und ein Benutzer hat mir empfohlen, dieser Gruppe beizutreten, da sie auch Neulingen gegenüber freundlich ist.
Ich habe Emacs als C ++ - IDE verwendet und korrigiere langsam Dinge, die nerven. Ich verwende im Wesentlichen die emacs.d-Datei von redguardtoo .
Ich habe eine Tag-Datei mit 225 MB (1,6 MB Tags). Meine Absicht für das Tag ist nicht unbedingt die Vervollständigung (Verwendung company
), sondern eher das Herumspringen im Quellcode. Ich arbeite mit einer unbekannten Codebasis und muss häufig Makro- oder Klassendefinitionen sehen.
Wenn ich zu zufälligen Zeiten mit der Eingabe beginne, wird im Minibuffer eine Nachricht angezeigt
Making tag completion table for [tag file]...0-100%
Anschließend wird ein Popup-Listenfeld mit Optionen für die automatische Vervollständigung angezeigt.
Da diese Tag-Datei so groß ist und das Laden der Tags nicht asynchron zu sein scheint, friert sie Emacs etwa eine Minute lang ein. Dies geschieht auch mehrmals pro Sitzung (mit derselben Datei und mit anderen Dateien im selben Verzeichnis, die dieselbe Tag-Datei verwenden)!
Fragen
- Weiß jemand, was das Laden der Tag-Tabelle zum Abschluss initialisiert und wie man sie deaktiviert? Ich habe in meinem Verzeichnis emacs.d nach "Tag-Vervollständigung durchführen" gesucht und nichts gefunden (Hinweis: IIRC, die Lade-Tags waren unabhängig von der Verwendung von
company
oder vorhandenauto-complete
- Die Fertigstellung wäre schön, aber ich würde mich nur mit der Möglichkeit zufrieden geben, zum Tag-Speicherort zu springen. Gibt es einen Weg, dies zu bekommen?
- Wie ist die Denkweise bei der Bewältigung solcher Probleme? Ich möchte in der Lage sein, das nächste Mal selbst weiter Fehler zu beheben.
zusätzliche Information
Aktivierte Nebenmodi (Ch m)
Enabled minor modes: Abbrev Auto-Composition Auto-Compression
Auto-Encryption Blink-Cursor Column-Number Company Desktop-Save
Display-Time Electric-Indent Electric-Pair Evil Evil-Local
Evil-Matchit Evil-Surround Fic File-Name-Shadow Flyspell-Lazy
Font-Lock Ggtags Global-Auto-Revert Global-Company Global-Eldoc
Global-Evil-Matchit Global-Evil-Surround Global-Font-Lock Global-Linum
Global-Page-Break-Lines Global-Pointback Global-Undo-Tree Helm
Helm-Match-Plugin Helm-Occur-Match-Plugin Line-Number Linum Menu-Bar
Mouse-Wheel Override-Global Pointback Recentf Savehist Shell-Dirtrack
Subword Tooltip Undo-Tree Which-Function Window-Numbering Winner Yas
Yas-Global
package-activated-list
entspricht
(ace-jump-mode ag s dash anaconda-mode f dash s dash json-rpc auto-compile packed bbdb bookmark+ browse-kill-ring buffer-move clean-aindent-mode cmake-mode coffee-mode color-theme company cpputils-cmake crontab-mode csharp-mode diminish dired+ dired-details dropdown-list dsvn elnode kv db kv fakir kv dash noflet creole kv noflet s noflet dash web s dash emmet-mode erlang evil-args evil goto-chg undo-tree evil-search-highlight-persist exec-path-from-shell expand-region f dash s fakir kv dash noflet fancy-narrow flymake-coffee flymake-easy flymake-css flymake-easy flymake-haml flymake-easy flymake-jslint flymake-easy flymake-lua flymake-python-pyflakes flymake-easy flymake-ruby flymake-easy flymake-sass flymake-easy flymake-shell flymake-easy flyspell-lazy fringe-helper ggtags git-gutter git-timemachine gitconfig-mode gitignore-mode goto-chg haskell-mode helm-descbinds helm async helm-gtags helm async hl-sexp htmlize ibuffer-vc idomenu iedit json-mode json-snatcher json-reformat json-reformat json-rpc json-snatcher kv legalese less-css-mode lua-mode magit git-rebase-mode git-commit-mode markdown-mode maxframe mic-paren move-text multi-term mwe-log-commands noflet org-fstree packed page-break-lines paredit pointback pomodoro pretty-mode project-local-variables quack rainbow-delimiters regex-tool rinari jump inflections findr ruby-compilation inf-ruby inf-ruby robe inf-ruby ruby-compilation inf-ruby rvm sass-mode haml-mode scratch scss-mode session sr-speedbar string-edit dash switch-window tagedit dash s textile-mode undo-tree unfill w3m web s dash wgrep ws-butler yaml-mode yasnippet
quelle
#include "..."
kann an verschiedenen Orten leben, die bis zur Build-Zeit nicht bekannt sind. Daher könnten ggtags für viele Dateien keine Tags generieren. Derzeit können wir mit unseren Build-Toolsmake etags
Emacs-kompatible Tags generieren, aber es gibt keinmake ggtags
Äquivalent. Also bin ich vorerst mit Etags festgefahren. Irgendwelche Ideen?ggtags
keine Tags generiert werden können, aber haben Siegtags
in der Befehlszeile im Projektstamm einfach verwendet ? Sie sollten dies versuchen und ggtags erneut aufrufen. Es sollte nicht geben,make ggtags
weil der eigentliche Befehl istgtags
;ggtags
ist nur ein Paketname von Emacs, die es verwenden. Eine andere Option ist, dass Sie ctags verwenden können ;ggtags
kann auchctags
Tags erkennen und es ist auch schnell. Sie können beim Aufrufen ctags-Tags generierenggtags-create-tags
, die die Verwendung desctags
Clients erfordern .gtags
ich nicht über solche Details Bescheid wissen könnte, denke ich nicht, dass das eingebauteetags
(mit Emacs gelieferte) oderctags
(ich habe oben verlinkt) dazu in der Lage wäre. Ich denke, Sie verwenden nurggtags
, um Tags im aktuellen Verzeichnis zu erstellen, nicht Projektstamm. Führen Sie den Befehlgtags
im Projektstamm aus, oderggtags
navigieren Sie zum Projektstamm , wenn Sie gefragt werden, wo er generiert werden soll.make etags
funktioniert, weil es etags aufruft, sobald es ausgewertet hat, wo sich alle.h
Dateien befinden.Antworten:
Für Ihren Anwendungsfall gibt es jedoch noch Hoffnung. Da Sie verwenden
etags
, kann es mithelm-etags-select
dem integrierten Helm-Befehl verwendet werden. Befolgen Sie dazu einfach die folgenden Schritte:find-tag
, um es Emacs zu füttern; Wenn die TAGS-Datei zu groß ist und Emacs Sie zur Bestätigung auffordert, akzeptieren Sie sie einfach. Ihre gesamte TAGS-Datei wird in Emacs geladen und es wird nicht mehr neu geladen.helm-etags-select
zum Schluss einfach ein beliebiges Symbol auf Ihrem Emacs aus. Wenn in Ihrem Projekt nur eine Definition vorhanden ist, springen Sie sofort. Andernfalls zeigen Sie einen Helmpuffer an, aus dem Sie auswählen können.Zum Abschluss möchten Sie, da Sie über eine große Tag-Datenbank verfügen, diese nicht verwenden
auto-complete
oder eincompany
Popup erstellen, da dies Ihre Emacs einfrieren würde. In diesem Fall können Sie die Helmfirma verwenden . Es ersetzt dascompany
Popup durch den Helmpuffer. Sie können es einfach zu Ihremc-mode-hook
oder hinzufügenc++-mode-hook
:quelle