TLDR: Tôi đã có một tệp thẻ lớn tải nhiều lần mỗi phiên, khiến nó không sử dụng được. Không thể tìm thấy nguồn gốc của vấn đề hoặc làm thế nào để vô hiệu hóa nó - mục tiêu chính là chuyển sang các thẻ, nhưng hoàn thành sẽ rất tốt
Gần đây tôi đã đăng trên subreddit emacs và một người dùng khuyên tôi nên tham gia nhóm này vì nó cũng thân thiện với người mới.
Tôi đã sử dụng emacs như một C ++ IDE và tôi đang dần sửa chữa những thứ gây phiền nhiễu. Tôi chủ yếu sử dụng tập tin emacs.d của redguardtoo .
Tôi có một tệp thẻ là 225 MB (Thẻ 1.6M). Ý định của tôi cho thẻ không nhất thiết phải hoàn thành (sử dụng company
), nhưng nhiều hơn để nhảy xung quanh mã nguồn. Tôi đang làm việc với một cơ sở mã không quen thuộc và thường cần xem các định nghĩa vĩ mô hoặc lớp.
Khi tôi bắt đầu nhập, vào những thời điểm ngẫu nhiên, tôi sẽ thấy một thông báo trong bộ thu nhỏ
Making tag completion table for [tag file]...0-100%
Sau đó, một hộp danh sách bật lên hiển thị với các tùy chọn tự động hoàn thành.
Vì tệp thẻ này quá lớn và có vẻ như việc tải thẻ không đồng bộ, nên nó đóng băng các emacs trong khoảng một phút. Điều này cũng xảy ra nhiều lần trong một phiên (với cùng một tệp và với các tệp khác trong cùng thư mục sử dụng cùng một tệp thẻ)!
Câu hỏi
- Có ai biết những gì đang khởi tạo việc tải bảng thẻ để hoàn thành và làm thế nào để vô hiệu hóa nó? Tôi đã thực hiện một grep trên thư mục emacs.d của mình để "Hoàn thành thẻ" và không tìm thấy gì (lưu ý, IIRC các thẻ tải có mặt bất kể sử dụng
company
hayauto-complete
- Hoàn thành sẽ tốt, nhưng tôi sẽ giải quyết chỉ vì khả năng nhảy đến vị trí thẻ. Có cách nào để có được điều này?
- Những suy nghĩ cần làm khi tiếp cận vấn đề như thế này là gì? Tôi muốn có thể khắc phục sự cố thêm vào lần tới.
thông tin bổ sung
Đã bật chế độ nhỏ (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
bằng
(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 "..."
có thể sống ở nhiều nơi khác nhau mà không biết đến thời gian xây dựng. Vì vậy, ggtags sẽ không thể tạo thẻ cho nhiều tệp. Hiện tại, các công cụ xây dựng của chúng tôi cho phép chúng tôi make etags
tạo các thẻ tương thích emacs, nhưng không có make ggtags
tương đương. Vì vậy, bây giờ tôi đang bị mắc kẹt với etags. Có ý kiến gì không?
ggtags
không thể tạo thẻ, nhưng bạn đã sử dụng đơn giản gtags
trên dòng lệnh tại dự án gốc chưa? Bạn nên thử điều này và gọi lại ggtags. Không nên có make ggtags
bởi vì lệnh thực sự là gtags
; ggtags
chỉ là một tên gói của Emacs sử dụng nó. Một lựa chọn khác là bạn có thể sử dụng ctags ; ggtags
cũng có thể nhận ra ctags
các thẻ và nó cũng nhanh. Bạn có thể tạo các thẻ ctags khi gọi ggtags-create-tags
và nó yêu cầu sử dụng ctags
máy khách.
gtags
không thể biết về các chi tiết như vậy, tôi không nghĩ rằng tích hợp etags
(đi kèm với Emacs) hoặc ctags
(tôi đã liên kết ở trên) sẽ có thể làm điều đó. Tôi nghĩ bạn chỉ sử dụng ggtags
để tạo thẻ tại thư mục hiện tại, không phải dự án root. Chạy lệnh gtags
tại root dự án hoặc khi ggtags
hỏi nơi tạo, điều hướng đến root dự án và bạn sẽ ổn.
make etags
hoạt động vì nó gọi etags một khi nó đánh giá nơi tất cả các .h
tệp sống.