2010-01-20 27 views
27

Dường như có nhiều cơ chế hoàn thành tự động Emacs thay thế. Nếu không có một tìm kiếm đầy đủ, sau đây đến tâm: ido, tự động hoàn thành, cột băng, trong bộ đệm hoàn thành, minibuffer hoàn thành và tiêu chuẩn ra khỏi hộp hoàn thành. Và sau đó là hoàn thành mã. Rất nhiều của nó. Và phần lớn phụ thuộc ngôn ngữ. Nó sẽ rất hữu ích để có một guru Emacs, hoặc ba, tóm tắt những lợi ích của các cầu thủ lớn trong cả hai mã và phi mã tự động hoàn thành. Và đây là Stack Overflow, nó đi mà không nói rằng nó sẽ là tốt để xác định các chế độ tự động hoàn thành mà làm việc tốt nhất cho cơ chế giống như IDE của Emacs.Làm cho cảm giác của các lựa chọn chế độ hoàn thành Emacs

Cập nhật: Tôi vừa phát hiện ra the Emacs Wiki completion page để khuếch đại câu hỏi cơ bản của tôi: tất cả những lựa chọn này, cái gì tốt, cái gì kém và nếu bạn chỉ chơi với 2-3 bạn muốn giới thiệu?

Trả lời

7

Tôi thường sử dụng hai gói hoàn thành (ngoài việc hoàn thành TAB được tích hợp trong bộ đệm mini và bộ đệm comint).

pabbrev.el - cung cấp đề xuất tại con trỏ (nhấn TAB) để chấp nhận. Các lựa chọn được thực hiện bằng cách nhìn vào tần số từ. Tôi thích điều này vì chỉ thị trực quan về những gì sẽ được hoàn thành - nhưng nó chủ yếu chỉ làm việc cho một lần hoàn thành.

hippie-expand - thường được gắn với M-/ thay cho dabbrev vì nó làm tất cả những gì dabbrev thực hiện và hơn thế nữa. Điều này hoạt động tốt khi bạn có thể cần phải xoay vòng qua một số lựa chọn thay thế hoặc nếu bạn muốn hoàn thành tên tệp hoặc tên khác.

Tôi thích cả hai vì chúng không yêu cầu di chuyển chuột và hoạt động nhanh.

4

Tôi sử dụng hoàn thành tab chuẩn trong minibuffer cho tên tệp, M-x lệnh và các thứ khác.

Tôi cũng thường xuyên sử dụng phím tắt M-/ (dabbrev-expand) để hoàn thành động từ bất kỳ từ nào trong bộ đệm Emacs của bạn. Nó là tuyệt vời, đặc biệt là cho các tên biến dài. Dưới đây là tài liệu:

 
M-/ runs the command dabbrev-expand, which is an interactive 
autoloaded Lisp function in `dabbrev.el'. 

It is bound to M-/. 

(dabbrev-expand ARG) 

Expand previous word "dynamically". 

Expands to the most recent, preceding word for which this is a prefix. 
If no suitable preceding word is found, words following point are 
considered. If still no suitable word is found, then look in the 
buffers accepted by the function pointed out by variable 
`dabbrev-friend-buffer-function'. 

A positive prefix argument, N, says to take the Nth backward *distinct* 
possibility. A negative argument says search forward. 

If the cursor has not moved from the end of the previous expansion and 
no argument is given, replace the previously-made expansion 
with the next possible expansion not yet tried. 

The variable `dabbrev-backward-only' may be used to limit the 
direction of search to backward if set non-nil. 

See also `dabbrev-abbrev-char-regexp' and C-M-/. 
4

Bạn có thể tìm đến công ty-mode hoặc gói autocomplete, mà có thể sử dụng các nguồn hoàn khác nhau, bao gồm Cedet, và họ cũng cho phép để xác định nguồn hoàn mới ... Đối với một số ngôn ngữ lập trình , bạn có thể sử dụng CEDET trực tiếp ...

+2

bạn có thể có nghĩa là http://cx4a.org/software/auto-complete/index.html, lạ không ai đề cập đến nó. Đó là trải nghiệm tốt nhất trong kinh nghiệm của tôi. – VitoshKa

+0

Có, tôi có nghĩa là gói này - Tôi luôn luôn quên có chứa dấu '-' và không có ;-) –

8

WRT Icicles -

Đối với hầu hết các phần, Icicles khoảng minibuffer hoàn thành. Có một vài trường hợp nó cung cấp một cái gì đó cho trong bộ đệm (ví dụ như mã) hoàn thành, nhưng nó chủ yếu là về hoàn thành minibuffer.

Khi hầu hết mọi người nghĩ về việc hoàn thành minibuffer, họ nghĩ về hoàn thành tên tệp, hoàn thành tên bộ đệm và hoàn thành tên lệnh. Nhưng có nhiều hơn nhiều hơn nữa.

Là một lập trình viên Emacs-Lisp, bạn có thể sử dụng hoàn thành bất cứ nơi nào bạn muốn cung cấp cho người dùng lựa chọn tương tác. Đó là khá chung chung!

Hoàn thành thực sự là khoảng khớp mẫu để xác định tập hợp, sau đó bạn có thể thao tác.

Hầu hết mọi người nghĩ rằng mục đích duy nhất của việc hoàn thành minibuffer là chọn một tên duy nhất (tệp, bộ đệm, lệnh, biến, ...). Nhưng sức mạnh hoàn thành thực sự là lọc và có thể sắp xếp tập hợp đầy đủ tên tệp, tên đệm, v.v. theo các cách khác nhau và sau đó cho phép người dùng làm điều gì đó hoặc với kết quả đặt (không nhất thiết là một đối tượng) .

Đó là những gì Icicles là về: cho phép bạn động (từng bước) xác định những bộ sử dụng mẫu-phù hợp với, và sau đó hành động dựa trên các thành viên được lựa chọn hoặc tất cả các thành viên của các bộ.

Đây không phải là mục đích của Ido hoặc các gói hoàn thành khác, ngoại trừ có thể là Helm (Bất cứ điều gì).

Không giống như Helm (Anything), mà đặc quyền phản đối tên so với các loại đối tượng và hành động như điểm khởi đầu của nó, trong Icicles bạn thường gọi một lệnh để làm điều gì đó dụng một hoặc nhiều đối tượng của một trao loại (ví dụ bộ đệm) và rồi bạn thu hẹp bộ đối tượng đó, thường là theo tên phù hợp. Nó thường là trường hợp trong Icicles mà bạn có thể hành động trên các đối tượng đó theo nhiều cách nhưng có liên quan trong cùng một lệnh.

Trong Helm (Bất cứ điều gì), nói chung đầu vào của bạn là xuất hiện đầu tiên của tên đối tượng chống lại toàn bộ vũ trụ của các đối tượng của tất cả các loại, và sau đó bạn thu hẹp xuống để chọn một số hoạt động (s) để thực hiện. Cuối cùng, hãy nhớ rằng mỗi phương pháp hoàn thành khác nhau đều cung cấp cả thứ gì đó (ví dụ: lệnh) cho người dùng cuối và thứ gì đó (ví dụ: tính năng hoàn thành) cho người lập trình.

Nếu bạn đang thực hiện hoàn thành mã thì bạn thường chỉ muốn hoàn tất tên tại điểm. Điều chính thú vị về hoàn thành mã là xác định những ứng cử viên thích hợp là gì. Đối với điều đó, ngữ cảnh văn bản (ví dụ: mã) thường là quan trọng nhất. Để cung cấp các lựa chọn thông minh, tính năng hoàn thành cần phân tích ngữ cảnh (mã), bao gồm bất kỳ ngữ cảnh bao hàm nào (ví dụ: mã dự án).

Hoàn thành thao tác rút gọn, mặt khác có thể được sử dụng cho bất kỳ loại lựa chọn và hành động nào, bao gồm nhiều lựa chọn với nhiều hành động. Ở đây, tất cả các phần thú vị: những gì các ứng cử viên để cung cấp, những gì bạn có thể làm với họ, vv

Dunno cho dù đó giúp, nhưng đó là của tôi đi anyway.

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