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
sumber
#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 kamimake etags
untuk menghasilkan tag yang kompatibel dengan emacs, tetapi tidak ada yangmake ggtags
setara. Jadi, saya terjebak dengan etag untuk saat ini. Ada ide?ggtags
tidak dapat menghasilkan tag, tetapi apakah Anda menggunakan polosgtags
pada baris perintah di root proyek? Anda harus mencoba ini dan meminta ggtag lagi. Seharusnya tidak adamake ggtags
karena perintah sebenarnya adalahgtags
;ggtags
hanyalah nama paket Emacs yang menggunakannya. Opsi lain adalah Anda bisa menggunakan ctag ;ggtags
juga dapat mengenalictags
tag dan juga cepat. Anda dapat membuat tag ctag saat memohonggtags-create-tags
dan meminta menggunakanctags
klien.gtags
tidak bisa tahu tentang detail seperti itu, saya tidak berpikir built-inetags
(datang dengan Emacs), atauctags
(saya ditautkan di atas) akan dapat melakukannya. Saya pikir Anda hanya menggunakanggtags
untuk membuat tag pada direktori saat ini, bukan memproyeksikan root. Jalankan perintahgtags
di root proyek, atau ketikaggtags
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.Jawaban:
Untuk kasus penggunaan Anda, masih ada harapan. Karena Anda menggunakannya
etags
, dapat digunakan denganhelm-etags-select
, perintah bawaan Helm. Untuk menggunakannya, cukup ikuti langkah-langkah tesis ini:find-tag
untuk memberi makan ke Emacs; jika file TAGS terlalu besar dan Emacs meminta Anda untuk mengonfirmasi, cukup terima saja. Seluruh file TAGS Anda akan dimuat di Emacs dan tidak ada lagi reload.helm-etags-select
saja simbol apa pun pada Emacs Anda. Jika hanya ada satu definisi di proyek Anda, langsung lompat; jika tidak, tampilkan buffer Helm untuk Anda pilih.Untuk penyelesaiannya, karena Anda memiliki database tag besar, Anda tidak ingin menggunakan
auto-complete
ataucompany
popup karena itu akan membekukan Emacs Anda. Dalam hal ini, Anda dapat menggunakan helm-perusahaan ; itu menggantikancompany
popup dengan Helm buffer. Anda hanya dapat menambahkannya ke Andac-mode-hook
atauc++-mode-hook
:sumber