2012-04-12 20 views
16

Tôi đang tạo ra một tập tin thẻ cho emacs cho Ruby on Rails dự án của tôi với lệnh sau đây:Tạo emacs thẻ nộp đơn xin một Ruby on Rails dự án

ctags -f TAGS --extra=-f --languages=-javascript --exclude=.git --exclude=log -e -R . $(rvm gemdir)/gems/ 

Khi tôi cố gắng tìm các thẻ (Sử dụng M.) một số thẻ đang hoạt động tốt, nhưng với nhiều thẻ khác, tôi nhận được các lỗi như:

tag-find-file-of-tag-noselect: File /Users/simao/Documents/sp/ofe/° ¡ not found 

etags-goto-tag-location: Rerun etags: `^class Tools::FilteringSteps' not found in /Users/simao/Documents/sp/ofe/lib/geo_db.rb 

Bạn tạo các thẻ cho các dự án RoR bằng các emac như thế nào? Bạn đã từng gặp vấn đề này chưa?

Đây là sản phẩm của ctags --version

Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert 
Compiled: Mar 9 2012, 15:47:35 
Addresses: <[email protected]>, http://ctags.sourceforge.net 
Optional compiled features: +wildcards, +regex 

phiên bản emacs của tôi:

GNU Emacs 24.0.95.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2012-04-02 
+0

Chỉ để rõ ràng, * là * '^ Công cụ lớp :: LọcSteps' trong'/Users/simao/Documents/sp/ofe/lib/geo_db.rb'? – phils

+0

Không, nó không phải là ... – simao

+0

Vì vậy, bạn đang nói rằng etags đã lập chỉ mục không chính xác dự án của bạn, và các tập tin TAGS nghĩ rằng lớp/phương pháp là trong một tập tin khác nhau đến nơi nó thực sự sống? (Ở đâu * không * nó thực sự sống?) – phils

Trả lời

0

Điều này có vẻ như nó có thể có liên quan:

Riêng lưu ý nhận xét trong liên kết thứ hai, cho thấy lỗi này đã tồn tại từ Emacs 22.

Giả sử bạn không chạy Emacs 24, có vẻ như bạn nên áp dụng bản vá đó để etags.el (và biên dịch lại byte).

(Nếu bạn đang sử dụng một phiên bản của Emacs 24 trong đó có lỗi này, bạn nên rõ ràng cập nhật lên phiên bản mới nhất pretest.)

+0

Tôi đang sử dụng 'GNU Emacs 24.0.95.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) của 2012-04-02' và tôi vẫn gặp sự cố này. – simao

+0

Ah, tôi hết ý tưởng rồi. Bạn nên thêm phiên bản Emacs của bạn vào câu hỏi. Tôi sẽ để lại câu trả lời này trong trường hợp nó hữu ích cho bất cứ ai khác. Chúc may mắn. – phils

+0

ok, cảm ơn sự giúp đỡ của bạn – simao

0

tôi sử dụng rtags. Đối với tôi, nó hoạt động tốt hơn với Ruby hơn ctags.

0

Nếu bạn đang sử dụng Git, tôi khuyên bạn nên làm theo thiết lập này từ Effortless ctags để tự động xây dựng các tập thẻ của bạn khi bạn thực hiện các thao git:

http://tbaggery.com/2011/08/08/effortless-ctags-with-git.html

Thậm chí nếu bạn không sử dụng Git, bạn có thể có thể thử lệnh của ông để xây dựng các ctags:

ctags --tag-relative -Rf.git/tags.$$ --exclude=.git --languages=-javascript,sql 

Ngoài ra, tôi khuyên bạn nên thiết lập một bí danh cho bó cài đặt để xác định một con đường để đá quý của bạn được nhóm vào thư mục con của dự án của bạn, chẳng hạn như:

alias bi='bundle install --path vendor' 

(Lưu ý: hãy chắc chắn .gitignore thư mục đó). Điều này sẽ cho phép bạn cũng nhảy trực tiếp vào nguồn của mỗi viên đá quý của bạn, và ngăn chặn tập tin thẻ của bạn khỏi bị cồng kềnh với tất cả các đá quý trong hệ thống của bạn.

7

Vâng, vâng, vâng. ;-)

Tại sao bạn quan tâm đến không sử dụng ctags ngay từ đầu? Ctags là một dự án tuyệt vời và nó hỗ trợ nhiều ngôn ngữ (như 50). Nhưng hỗ trợ của Ruby rất yếu, trình phân tích cú pháp không ở trong tình trạng tốt và nó đã không bị thay đổi 4 năm nay.

  • Ctags không đối phó với: module A :: B
  • Ctags không tag (ít nhất là một số) các phương pháp điều hành như ==
  • Ctags không hỗ trợ thẻ đủ điều kiện, - type = +
  • Ctags không xuất thẻ cho hằng số hoặc thuộc tính.

Thật không may tất cả những người khác (tôi tìm thấy 2) Máy phát thẻ Ruby ctags hoặc là lỗi thời (không hỗ trợ Ruby 1.9+) hoặc rất chậm. Nhưng có một giải pháp! Nó được gọi là ripper-tags. https://github.com/tmm1/ripper-tags

gem install ripper-tags 
cd your_project/ 
ripper-tags -R # for vim 
ripper-tags -R -f TAGS # for emacs 

Dự án này tận dụng API phân tích cú pháp Ruby có sẵn được gọi là Ripper. Nó nhanh và hoạt động như mong đợi. Nó gần như nhanh như ctags, nhưng cho kết quả chính xác nhất. Cảnh báo: Nó KHÔNG hỗ trợ Ruby 1.8.

Nếu bạn thích ripper-tags và bạn muốn có tất cả các thẻ được tạo tự động khi cài đặt đá quý, bạn có thể kiểm tra gem-ripper-tags. Thật không may nó không hỗ trợ Emacs tại thời điểm này (bản vá được chấp nhận - khá dễ dàng để làm). Thông tin thêm tại: https://github.com/lzap/gem-ripper-tags

6

đó là năm 2016 ở đây và các thẻ có vẻ hoạt động tốt với ruby ​​tại thời điểm này. Ctags có lẽ quá.

Đây là tác vụ cào tôi đã viết để quản lý thẻ. Lưu nó dưới dạng lib/tasks/etags.rake và sau đó chạy rake etags create theo định kỳ. Thay thế etags bằng ctags nếu bạn sử dụng vi.

def project_root 
    gemfile_path = ENV['BUNDLE_GEMFILE'] 
    if !gemfile_path || gemfile_path.empty? 
    then fail "can't find the root of your project from $BUNDLE_GEMFILE" 
    else File.dirname gemfile_path 
    end 
end 

namespace :etags do 
    desc "generate tags for emacs code hypertext linking aka metadot" 
    task create: :environment do 
    system "find #{project_root}/app/ -iname \\*.rb -print0 | xargs -0 etags" 
    end 

    desc "remove tags for emacs code hypertext linking aka metadot" 
    task clean: :environment do 
    system "rm #{project_root}/TAGS" 
    end 
end