TLDR: Saya punya file tag besar yang memuat beberapa kali per sesi, membuatnya tidak dapat digunakan. Tidak dapat menemukan sumber masalah atau cara menonaktifkannya - tujuan utamanya adalah melompat ke tag, tetapi penyelesaiannya akan menyenangkan
Saya baru-baru ini diposting di subreddit emacs dan seorang pengguna merekomendasikan agar saya bergabung dengan grup ini karena juga ramah terhadap pemula.
Saya telah menggunakan emacs sebagai C ++ IDE, dan saya perlahan memperbaiki hal-hal yang mengganggu. Saya pada dasarnya menggunakan file emacs.d redguardtoo .
Saya memiliki file tag 225MB (Tag 1,6M). Maksud saya untuk tag belum tentu selesai (menggunakan company
), tetapi lebih untuk melompat-lompat kode sumber. Saya bekerja dengan basis kode yang tidak dikenal dan sering perlu melihat definisi makro atau kelas.
Ketika saya mulai mengetik, secara acak, saya akan melihat pesan di minibuffer
Making tag completion table for [tag file]...0-100%
Kemudian, kotak daftar sembulan muncul dengan opsi pelengkapan otomatis.
Karena file tag ini sangat besar, dan sepertinya tag tidak asinkron, pembekuan emacs sekitar satu menit. Ini juga terjadi beberapa kali per sesi (dengan file yang sama, dan dengan file lain di direktori yang sama yang menggunakan file tag yang sama)!
Pertanyaan
- Adakah yang tahu apa yang menginisialisasi pemuatan tabel tag untuk penyelesaian dan cara menonaktifkannya? Saya melakukan grep pada direktori emacs.d saya untuk "Membuat penyelesaian tag" dan tidak menemukan apa pun (perhatikan, IIRC tag pemuatan hadir terlepas dari menggunakan
company
atauauto-complete
- Penyelesaian akan menyenangkan, tapi saya puas hanya dengan kemampuan untuk melompat ke lokasi tag. Apakah ada cara untuk mendapatkan ini?
- Apa pola pikir yang harus diambil ketika mendekati masalah seperti ini? Saya ingin dapat memecahkan masalah lebih lanjut pada waktu saya berikutnya.
informasi tambahan
Diaktifkan mode minor (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
adalah sama dengan
(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 "..."
dapat hidup di berbagai tempat yang tidak diketahui hingga waktu pembangunan. Jadi, ggtag tidak akan dapat menghasilkan tag untuk banyak file. Saat ini, alat bangun kami memungkinkan kami make etags
untuk menghasilkan tag yang kompatibel dengan emacs, tetapi tidak ada yang make ggtags
setara. Jadi, saya terjebak dengan etag untuk saat ini. Ada ide?
ggtags
tidak dapat menghasilkan tag, tetapi apakah Anda menggunakan polos gtags
pada baris perintah di root proyek? Anda harus mencoba ini dan meminta ggtag lagi. Seharusnya tidak ada make ggtags
karena perintah sebenarnya adalah gtags
; ggtags
hanyalah nama paket Emacs yang menggunakannya. Opsi lain adalah Anda bisa menggunakan ctag ; ggtags
juga dapat mengenali ctags
tag dan juga cepat. Anda dapat membuat tag ctag saat memohon ggtags-create-tags
dan meminta menggunakan ctags
klien.
gtags
tidak bisa tahu tentang detail seperti itu, saya tidak berpikir built-in etags
(datang dengan Emacs), atau ctags
(saya ditautkan di atas) akan dapat melakukannya. Saya pikir Anda hanya menggunakan ggtags
untuk membuat tag pada direktori saat ini, bukan memproyeksikan root. Jalankan perintah gtags
di root proyek, atau ketika ggtags
menanyakan di mana menghasilkan, arahkan ke root proyek dan Anda akan baik-baik saja.
make etags
berfungsi karena ia memanggil etag setelah mengevaluasi tempat semua .h
file hidup.