2013-03-07 36 views
20

Tôi là người mới tham gia chương trình Emacs. Tôi phải cố gắng tìm kiếm cách sử dụng Emacs để sử dụng với các dự án C++ lớn, đặc biệt là mã chỉ mục và các tên hàm tự động hoàn thành và hoạt động giống như Eclipse. Tôi đã sử dụng Vim một thời gian mà tôi sử dụng ctags để chỉ số mã trong dự án của tôi và Vim sử dụng để thử tự động hoàn thành mã của tôi bằng cách sử dụng một trình đơn thả xuống của các tùy chọn. Tôi đang cố gắng để đạt được cùng với Emacs bây giờ. Tuy nhiên, trong quá trình tìm kiếm của tôi, các kết quả chỉ ra CEDET và tự động hoàn thành và các plugin của bên thứ ba khác.Emacs làm IDE cho các dự án lớn C + +

Tôi đã cố gắng sử dụng ctags với ctags -e -R . và etags, nhưng không thành công.

Tôi có thiếu phương thức mặc định của Emacs để đạt được cùng một hành vi không? Cách tốt nhất và dễ nhất để đạt được điều tôi muốn là gì?

+0

Bạn có thể muốn kiểm tra GNU global plus xgtags.el và clang dựa trên auto-complete. Ngữ nghĩa cũng có thể sử dụng cả hai. – Arne

+0

Kiểm tra clang để tự động hoàn thành C++: http://root42.blogspot.hu/2012/07/nice-c-autocomplete-configuration-for.html – Tom

+0

Tôi hiện đang phát triển ['clang-tags'] (https://github.com/ffevotte/clang-tags), một công cụ lập chỉ mục dựa trên clang. Nó vẫn còn trong giai đoạn đầu của sự phát triển, nhưng bạn có thể thấy nó có thể sử dụng được. Nếu bạn thử nó, tôi sẽ rất vui khi nhận được một số phản hồi về github. – Francesco

Trả lời

16

Tôi sử dụng CEDET với tự động hoàn tất thành công. Về cơ bản, autocomplete là nhà cung cấp hộp thả xuống, và nó lấy nguồn từ nhiều thứ khác nhau, thú vị nhất từ ​​CEDET (nhưng cũng từ etags và Gnu Global, mà tôi cũng khuyên bạn nên).

Một điểm khởi đầu tốt cho Cedet là http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html

Alex Ott của emacs cấu hình là có: https://github.com/alexott/emacs-configs - đó là một nguồn tài nguyên hữu ích.

Lưu ý rằng bạn sẽ cần phải lấy CEDET từ bzr và cài đặt/định cấu hình tự động điền chính xác. Tôi khuyên bạn nên el-get để cài đặt tự động hoàn thành (và một số công cụ khác nữa). Bạn sẽ cần phải thiết lập các dự án chung cho EDE để có tự động hoàn thành làm việc cho các tệp C/C++ ngẫu nhiên không phải là một phần của dự án EDE có cấu trúc.

Bạn sẽ phải mất một chút thời gian để định cấu hình các emac, nhưng nó sẽ trả hết. Công cụ này rất hiệu quả khi được thiết lập chính xác.

+0

+1 cho "Công cụ cực kỳ hiệu quả khi được thiết lập đúng" –

+0

Tôi có thể phải lưu ý rằng tôi không sử dụng CEDET nữa, do thực tế là trình phân tích cú pháp C++ không chính xác và chậm như địa ngục. Bây giờ tôi sử dụng chế độ irony-mode dựa trên libclang để hoàn thành và gtags cho điều hướng. –

5

Nó phụ thuộc vào những gì bạn đang tìm kiếm trong một IDE. Tôi đã sử dụng Emacs cho một dự án C++ khá lớn. Tất nhiên bạn cần cấu hình các emacs để làm việc khi bạn muốn nó hoạt động ở mức độ lớn hơn bất kỳ IDE nào khác.

Nhưng có CEDET là sự khởi đầu, mặc dù nó không hoàn hảo.

Tuy nhiên, có chế độ tự động hoàn thành rất tốt cho Emacs http://cx4a.org/software/auto-complete/ nó không phải là intelisense nhưng nó nên tích hợp với CEDET theo một cách nào đó để cung cấp cho bạn một tự động tốt đẹp hoàn thành.

Một tính năng quan trọng khác mà tôi thường sử dụng là chức năng ff-find-other-file để dễ dàng chuyển từ tệp tiêu đề và tệp triển khai.

Sau đó, tất nhiên bạn cần phải cuộn bulid của riêng bạn. CEDET có một số hỗ trợ cho các dự án, nhưng tôi chưa thử nghiệm nó. Tuy nhiên Emacs tích hợp tốt với các công cụ xây dựng dòng lệnh như thực hiện. Lỗi được in trong bộ đệm và bạn có thể chuyển đến dòng chính xác dễ dàng trong Emacs.

GDB cũng được tích hợp tốt với Emacs M-x gdb, sau đó chỉ cần nhớ lệnh gdb-many-windows.

10

Indexing

Bạn có thể muốn sử dụng GNU/global thay vì ctags: nó hỗ trợ C++ và là theo ý kiến ​​của tôi hiệu quả hơn với các dự án lớn (đặc biệt là kể từ khi bạn có thể cập nhật các chỉ số thay vì xây dựng lại nó từ đầu). Và nó vẫn đơn giản hơn rất nhiều khi sử dụng CEDET/Semantic (đó cũng là một công cụ tuyệt vời nếu bạn dành thời gian để thiết lập nó).

Ví dụ sử dụng:

$ cd sources 
$ gtags -v   # create the index 
$ cd subdirectory 
$ [hack hack hack] 
$ global -u  # update the index (can be called from anywhere in the project) 

Trong Emacs, kích hoạt gtags-mode trong bộ đệm mã nguồn để có được quyền truy cập vào các gtags lệnh:

  • gtags-find-tag (M.): Tìm định nghĩa của thẻ được chỉ định trong các tệp nguồn của bạn (gtags cho phép bạn chọn giữa tất cả các định nghĩa có thể nếu có một số hoặc nhảy trực tiếp nếu chỉ có một khả năng)
  • gtags-pop-stack (M *): trở lại vị trí trước
  • gtags-find-rtag: tìm tất cả các công dụng của thẻ được quy định trong các tập tin nguồn

Dưới đây là cấu hình của tôi cho gtags, mà tự động kích hoạt gtags-mode nếu một chỉ số được tìm thấy:

;; gtags-mode 
(eval-after-load "gtags" 
    '(progn 
    (define-key gtags-mode-map (kbd "M-,") 'gtags-find-rtag))) 
(defun ff/turn-on-gtags() 
    "Turn `gtags-mode' on if a global tags file has been generated. 

This function asynchronously runs 'global -u' to update global 
tags. When the command successfully returns, `gtags-mode' is 
turned on." 
    (interactive) 
    (let ((process (start-process "global -u" 
           "*global output*" 
           "global" "-u")) 
     (buffer (current-buffer))) 
    (set-process-sentinel 
    process 
    `(lambda (process event) 
     (when (and (eq (process-status process) 'exit) 
        (eq (process-exit-status process) 0)) 
      (with-current-buffer ,buffer 
      (message "Activating gtags-mode") 
      (gtags-mode 1))))))) 

(add-hook 'c-mode-common-hook 'ff/turn-on-gtags) 

Hoàn thành tự động

Tôi không biết bất kỳ công cụ nào tốt hơn auto-complete. Ngay cả khi nó không được bao gồm trong Emacs, nó rất dễ dàng cài đặt bằng cách sử dụng hệ thống đóng gói (ví dụ trong các kho marmalade hoặc melpa).

1

Tôi khuyên bạn nên xem bài thuyết trình về sét Atila Neves tại CppCon 2015 có tiêu đề Emacs as a C++ IDE.

Để biết chi tiết, hãy xem câu trả lời của tôi cho this related question.

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