Làm thế nào để có được mã hoàn thành trong emacs?


20

Tôi biết rằng emacs hỗ trợ hoàn thành mã. Nhưng thành thật mà nói tôi chưa bao giờ là một người đọc FAQ tốt, ít nhất là đối với một cái gì đó mà tôi hoàn toàn mới. Vì vậy, tôi tự hỏi những gì tôi cần tải xuống và làm thế nào để emacs có thể thực hiện một số hoàn thành mã thông minh cho tôi trong C ++ và Java. Hoặc có gói nào hoàn thành mã cho nhiều ngôn ngữ chính không?

Câu trả lời:


27

Cách cơ bản sẽ hoạt động trên mọi loại bộ đệm trong emacs là viết tắt động được sử dụng bằng cách nhấn M-/(aka alt+ /)

Điều đó sẽ mở rộng văn bản để sao chép các chuỗi khác đã có trong bộ đệm hiện tại của bạn hoặc trong các bộ đệm khác hiện đang mở.

Để hoàn thành mã mở rộng hơn, dành riêng cho ngôn ngữ dành cho C ++ hoặc Java (hoặc các ngôn ngữ khác), bạn sẽ muốn xem xét một gói mã khuôn mẫu hoặc đoạn mã. Có một số thảo luận trong câu hỏi liên quan này trên StackOverflow. Một điều thường được đề cập trong các cuộc thảo luận này là yasnippet - có một bản demo screencast trong bài đăng này trên blog của emacs .


+1. Bạn cũng có thể muốn complete.elthử thư viện tiêu chuẩn . Nó rất cũ và ít được biết đến, nhưng loại hoàn thành trong bộ đệm mà nó cung cấp có thể hữu ích. M-x find-library complete, sau đó đọc Bình luận trong tệp.
vẽ

21

Câu trả lời của @ Doug đã lỗi thời một chút và trọng tâm của anh là mở rộng mã bằng cách sử dụng các đoạn được xác định trước.

Tôi nghĩ rằng câu hỏi của OP là về intellisense (ví dụ tên phương thức hoàn thành tự động của một lớp).

  1. hippie mở rộng được sử dụng phổ biến, bộ phân tích cú pháp là các thẻ emacs . Vì vậy, nó hỗ trợ tất cả các ngôn ngữ ctags hỗ trợ (bao gồm C ++ , Java). Nhưng kết quả không hoàn hảo vì ctags chỉ sử dụng biểu thức chính quy để phân tích mã. Xem init-hippie-extend.el của tôi để biết chi tiết. Bạn có thể bắt đầu bằng cách kiểm tra giá trị củahippie-expand-try-functions-list

  2. tự động hoàn thành là một hiện đại với giao diện người dùng ưa thích (menu thả xuống, ngay cả trong cửa sổ giao diện điều khiển). Nếu bạn sử dụng tiếng kêu như một phụ trợ. Các intellisense là tốt hơn nhiều. Để clang hoạt động, bạn cần cài đặt auto-Complete-clang, đó là plugin của auto-perfect. Nó chỉ hỗ trợ ngôn ngữ clang hỗ trợ (C / C ++ / Obj-C). Như Sylvain Benner đã chỉ ra, bạn có thể sử dụng emacs-eclim làm phần cuối phân tích cú pháp java mà thực sự gọi là thực thi của nhật thực. Vì vậy, tự động hoàn thành có thể hỗ trợ java. Xem init-auto-Complete.el của tôi để biết chi tiết.

  3. semantic cung cấp cả UI và công cụ phân tích cú pháp phía sau. Nó chậm. Giao diện người dùng thả xuống là OK nhưng yêu cầu cửa sổ X. Kết quả intellisense tốt hơn ctags. Và sự thông thái là quá táo bạo đối với tôi. Xem init-semantic.el để biết chi tiết.

  4. chế độ công ty tương tự như tự động hoàn thành, điểm khác biệt là nó đóng gói mọi thứ thành một gói. Ví dụ: nhà phát triển C ++ chỉ cần cài đặt chế độ công ty (tự động hoàn tất cần một số plugin của bên thứ 3). Một sự khác biệt UI là công ty sẽ tự động hiển thị ứng viên . Vì vậy, bạn nhấn ít phím trong công ty. Có thể thực hiện điều tương tự trong tự động hoàn thành sau khi tùy chỉnh.

Tóm lại, tự động hoàn thành, công ty là hai lựa chọn phổ biến nhất. Semantic và hippie-bung cũng được hoan nghênh nhưng ít được sử dụng. Những người khác quá tầm thường để đề cập và các tính năng của họ đã được bao phủ bởi bốn người lớn. Ví dụ: tự động hoàn thành có thể sử dụng yasnippet làm nguồn đầu vào (tự động hoàn thành cung cấp giao diện người dùng, nhưng các ứng cử viên thực tế được tạo ra bởi phần cuối yasnippet).

Tôi đề nghị sử dụng tự động hoàn thành hoặc công ty làm plugin hoàn thành mã chínhcả ngữ nghĩa hoặc hippie-bung như là plugin bổ sung .

Tôi sử dụng chế độ công ty và hippie-bung vì,

  • Hiện tại (năm 2017) chế độ công ty được duy trì tích cực hơn tự động hoàn thành và có nhiều plugin bên thứ 3 hơn (ví dụ: plugin latex)

  • hippie-extend không hoạt động lắm nhưng nó không chiếm TABkhóa mà chế độ công ty / ngữ nghĩa / tự động hoàn thành đang sử dụng

Nếu bạn sử dụng chế độ công ty cho C ++ / Java, bạn có thể muốn sửa đổi company-backends.

Một vài lời khuyên về chế độ công ty,

Bạn có thể cần điều chỉnh giá trị của company-backends. Ví dụ, giả sử giá trị của nó là (company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords)). Sau đó, nếu company-eclimcó thể nhận được các ứng cử viên khác không, hãy companynghĩ rằng bạn đang viết java, vì vậy nó sẽ KHÔNG chạy phụ trợ sau company-eclim.

Bây giờ hãy xem xét (company-dabbrev-code company-gtags company-etags company-keywords). Tất cả bốn phụ trợ này sẽ được sử dụng cùng nhau. Ví dụ, ngay cả sau khi company-dabbrev-codeđã tìm nạp các ứng cử viên khác không thành công, ba phần phụ trợ khác vẫn được thực thi.

Trong thế giới thực, thường cần phải điều chỉnh lại thứ tự phụ trợ hoặc thêm phụ trợ mới ( company-rtagsví dụ).


gói tự động hoàn thành tốt nhất trong Emacs 24 cho latex là gì?
tiến sĩ

@doctorate Tôi nghĩ bạn cần sử dụng tính năng tự động hoàn thành và nguồn của nó emacswiki.org/emacs/AutoCompleteSource , nhưng tôi là một lập trình viên thay vì người dùng latex, vì vậy, bạn nên kiểm tra kỹ hơn tại cộng đồng Google cộng với Emacs .
chen bin

xin lưu ý lưu ý chế độ công ty cũng hỗ trợ latex. Vì vậy, tôi đề nghị công ty thay vì tự động hoàn thành
chen bin

2

Câu trả lời ngắn gọn: Tôi không biết gì về emacs hữu ích cho java. Mở rộng động không quan tâm đến các thư viện trong đường dẫn lớp của bạn, nó không biết gì về mã bạn đang nhập, nó chỉ có thể mở rộng thành văn bản đã tồn tại trong một trong các bộ đệm. JDE và emacs-eclim cố gắng cung cấp chức năng này nhưng cá nhân tôi không ấn tượng.


0

Câu trả lời ngắn: M-/

Câu trả lời dài: RTFM :-)


6
+1, thần tôi hy vọng câu hỏi tiếp theo tôi thấy là "cần giúp đỡ cách sử dụng lệnh RTFM"
rownage

@rownage: oh, thats '' info-emacs-manual'` ( C-h r)
Samb

1
Thế còn C-h k M-/?
Doug Harris
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.