TLDR: J'ai un gros fichier de balises qui se charge plusieurs fois par session, ce qui le rend inutilisable. Impossible de trouver la source du problème ou comment le désactiver - l'objectif principal est de passer aux balises, mais l'achèvement serait bien
J'ai récemment posté sur le subreddit emacs et un utilisateur m'a recommandé de rejoindre ce groupe car il est également convivial avec les débutants.
J'ai utilisé emacs comme IDE C ++, et je corrige lentement des choses ennuyeuses. J'utilise essentiellement le fichier emacs.d de redguardtoo .
J'ai un fichier de balises de 225 Mo (balises de 1,6 Mo). Mon intention pour la balise n'est pas nécessairement l'achèvement (en utilisant company
), mais plus pour sauter le code source. Je travaille avec une base de code inconnue et j'ai souvent besoin de voir des définitions de macro ou de classe.
Lorsque je commence à taper, à des moments aléatoires, je vois un message dans le mini-tampon
Making tag completion table for [tag file]...0-100%
Ensuite, une liste déroulante apparaît avec des options de saisie semi-automatique.
Étant donné que ce fichier de balises est si volumineux et qu'il ne semble pas que le chargement des balises soit asynchrone, il fige emacs pendant environ une minute. Cela se produit également plusieurs fois par session (avec le même fichier et avec d'autres fichiers du même répertoire qui utilisent le même fichier de balises)!
Des questions
- Quelqu'un sait-il ce qui initialise le chargement de la table de balises pour l'achèvement et comment le désactiver? J'ai fait un grep sur mon répertoire emacs.d pour "Faire la complétion des balises" et je n'ai rien trouvé (note, IIRC les balises de chargement étaient présentes indépendamment de l'utilisation
company
ouauto-complete
- L'achèvement serait bien, mais je me contenterais de pouvoir sauter à l'emplacement du tag. Y a-t-il un moyen de l'obtenir?
- Quelle est la mentalité à adopter pour aborder des problèmes comme celui-ci? Je voudrais être en mesure de dépanner davantage par moi-même la prochaine fois.
information additionnelle
Modes mineurs activés (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
est égal à
(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
#include "..."
peut vivre dans divers endroits qui ne sont connus qu'au moment de la construction. Ainsi, ggtags ne pourrait pas générer de balises pour de nombreux fichiers. Actuellement, nos outils de build nous permettent make etags
de générer des tags compatibles emacs, mais il n'y a pas d' make ggtags
équivalent. Donc, je suis coincé avec des étiquettes pour le moment. Des idées?
ggtags
vous ne pouvez pas générer de balises, mais avez-vous utilisé plain gtags
sur la ligne de commande à la racine du projet? Vous devriez essayer ceci et invoquer à nouveau ggtags. Il ne devrait pas y en avoir make ggtags
parce que la vraie commande est gtags
; ggtags
est juste un nom de package d'Emacs qui l'utilise. Une autre option est que vous pouvez utiliser des ctags ; ggtags
peut également reconnaître les ctags
balises et c'est aussi rapide. Vous pouvez générer des balises ctags lors de l'appel ggtags-create-tags
et il demande d'utiliser le ctags
client.
gtags
je ne pouvais pas connaître ces détails, je ne pense pas que le intégré etags
(fourni avec Emacs) ou ctags
(que j'ai lié ci-dessus) serait en mesure de le faire. Je pense que vous utilisez uniquement ggtags
pour créer des balises dans le répertoire actuel, pas la racine du projet. Exécutez la commande gtags
à la racine du projet, ou lorsque ggtags
vous demandez où générer, accédez à la racine du projet et tout ira bien.
make etags
fonctionne car il appelle etags une fois qu'il a évalué l'emplacement de tous les .h
fichiers.