2011-01-21 26 views
23

Trong phòng thu trực quan, bạn dễ dàng nhấn nút F12 để chuyển sang khai báo hàm hoặc biến khi chỉnh sửa mã C/C++.Phím tắt để chuyển sang khai báo trong Emacs là gì?

Có khóa cắt ngắn trong các emacs để làm điều đó không?

+0

Câu hỏi quá rộng, IMO. Các câu trả lời nằm trong phạm vi từ Imenu đến các lệnh thẻ khác nhau, và trở đi cho bất kỳ số lượng tính năng nào của bên thứ ba. Tôi muốn nói bắt đầu với hướng dẫn Emacs ... – Drew

Trả lời

23

Vâng, nó có liên quan nhiều hơn thế.

Theo mặc định, Emacs không "biết" về khai báo hàm cho mã C hoặc C++. Đầu tiên, lấy Exuberant Ctags. Sau đó, sử dụng lệnh etags (ctags cho Emacs) trên mã nguồn của bạn. Một tệp có tên TAGS sẽ được tạo.

Sau đó, trong khi chỉnh sửa mã nguồn của bạn, khi bạn muốn chuyển đến một tuyên bố, hãy bấm M-. (meta và dấu chấm hoặc alt và dấu chấm trên bàn phím hiện đại). Lúc đầu, Emacs sẽ hỏi bạn về vị trí tệp thẻ của bạn. Trỏ tới điểm bạn đã tạo và sau đó điều hướng sẽ tự động.

Tôi khuyên bạn nên đọc Emacswiki article about tags để hiểu rõ hơn về chức năng này.

Phiên bản mới nhất của Emacs (23.2) được tích hợp CEDET, có nhiều tính năng nâng cao cho điều hướng C và C++, nhưng có thể hơi khó thiết lập, vì vậy hãy đọc thêm nếu bạn quan tâm .

+0

Làm thế nào để làm cho Emacs nhảy đến định nghĩa của một hàm (thực thi của nó) hơn là khai báo của nó (nó là nguyên mẫu thường trong một tệp tiêu đề)? Tôi chạy ctags với 'ctags -R -e --c-types = cdefglmnpstuvx'. –

4

Có nhiều cách để thực hiện việc này. Như darioo đã đề cập, Ctags là một, nhưng nó đi đến định nghĩa theo mặc định (có thể làm việc cho bạn). Tuy nhiên, nhìn xa hơn, bạn có thể thấy rằng tiền tố M-. (ví dụ: C-u M-.) sẽ đưa bạn đến kết quả khớp thẻ tiếp theo (thường là khai báo). Ngoài ra còn có một tùy chọn --declarations, nhưng Exuberant Ctags dường như không hỗ trợ nó.

CEDET là một tùy chọn khác, nhưng theo kinh nghiệm của tôi, nó vẫn chưa sẵn sàng để sản xuất. Thông thường, trong C++ semantic-ia-fast-jump sẽ chuyển đến khai báo chuyển tiếp thay vì định nghĩa hoặc khai báo.

+0

Cảm ơn (C-u M-.) –

2

M-. phím sẽ đưa bạn đến các hàm emacs định nghĩa hàm.

+0

Tôi phải là câu trả lời đúng, Tôi cũng phát hiện ra lệnh đó do nhầm lẫn :)) –

7

Như những người khác đã nói không có giải pháp phổ dụng tích hợp cho điều này trong các emacs. Điều đó nói rằng, sau khi có chức năng này trong IntelliJ tôi muốn nó trong emacs quá vì vậy tôi thực hiện Dumb Jump.

Ngay bây giờ Dumb Jump có hỗ trợ cơ bản cho:

  • Javascript
  • Emacs Lisp
  • Python
  • Go
  • PHP
  • của Ruby
  • Faust
  • và hơn thế nữa ... (trên 20 giờ)

Nó có sẵn qua MELPA và đang tích cực phát triển.

Các vấn đề liên quan