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
la source
#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 permettentmake 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é plaingtags
sur la ligne de commande à la racine du projet? Vous devriez essayer ceci et invoquer à nouveau ggtags. Il ne devrait pas y en avoirmake ggtags
parce que la vraie commande estgtags
;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 lesctags
balises et c'est aussi rapide. Vous pouvez générer des balises ctags lors de l'appelggtags-create-tags
et il demande d'utiliser lectags
client.gtags
je ne pouvais pas connaître ces détails, je ne pense pas que le intégréetags
(fourni avec Emacs) ouctags
(que j'ai lié ci-dessus) serait en mesure de le faire. Je pense que vous utilisez uniquementggtags
pour créer des balises dans le répertoire actuel, pas la racine du projet. Exécutez la commandegtags
à la racine du projet, ou lorsqueggtags
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.Réponses:
Pour votre cas d'utilisation, il y a encore de l'espoir. Depuis que vous l'utilisez
etags
, il peut être utilisé avechelm-etags-select
la commande intégrée Helm. Pour l'utiliser, suivez simplement ces étapes:find-tag
pour alimenter Emacs; si le fichier TAGS est trop volumineux et qu'Emacs vous demande de le confirmer, acceptez-le. Votre fichier TAGS entier sera chargé dans Emacs et il n'y a plus de rechargement.helm-etags-select
n'importe quel symbole sur votre Emacs. S'il n'existe qu'une seule définition dans votre projet, sautez instantanément; sinon, affichez un tampon Helm parmi lequel vous pouvez choisir.Pour terminer, puisque vous avez une grande base de données de balises, vous ne voudriez pas utiliser
auto-complete
oucompany
popup car cela gèlerait vos Emacs. Dans ce cas, vous pouvez utiliser helm-company ; il remplacecompany
popup par Helm buffer. Vous pouvez simplement l'ajouter à votrec-mode-hook
ouc++-mode-hook
:la source