2009-01-15 25 views
9

Vim của Ctrl +N thường hoạt động như thế này: Tôi gõ vài chữ, nhấn Ctrl + N, và Vim cung cấp cho tôi với hoàn dựa trên các từ trong tất cả các bộ đệm mở của tôi.Làm thế nào để thực hiện tương đương với Ctrl-n của Vim trong GNU Emacs?

Giải pháp cho Emacs không nhất thiết phải giống nhau. Tôi chủ yếu sử dụng nó như thế này: khai báo biến, sau đó sử dụng nó trong mã sau. Nhưng tôi thích cách tiếp cận nhẹ của không phải là phân tích cú pháp mã nguồn.

+0

Mẹo hay, không biết về Ctrl-n! –

Trả lời

3

Cá nhân tôi sử dụng AutoComplete Nó cung cấp cho bạn một hộp thả xuống đẹp mắt. Bạn có thể chọn số lượng chữ cái bạn muốn nhập trước khi kích hoạt và tùy chỉnh nội dung bạn muốn hiển thị, bao gồm cả nội dung trong mở rộng dabbrev.

2
;; Allow tab to autocomplete 

(defun indent-or-expand (arg) 
    "Either indent according to mode, or expand the word preceding point." 
    (interactive "*P") 
    (if (and 
     (or (bobp)  (= ?w (char-syntax (char-before)))) 
     (or (eobp) (not (= ?w (char-syntax (char-after)))))) 
     (dabbrev-expand arg) 
    (tab-to-tab-stop))) 

(defun my-tab-fix() 
    (local-set-key [tab] 'indent-or-expand)) 

(add-hook 'as-mode-hook   'my-tab-fix) 
(add-hook 'java-mode-hook  'my-tab-fix) 
(add-hook 'c-mode-hook   'my-tab-fix) 
(add-hook 'sh-mode-hook   'my-tab-fix) 
(add-hook 'emacs-lisp-mode-hook 'my-tab-fix) 
13

thử hippie-mở rộng, liên kết với chìa khóa mà bạn yêu thích

(global-set-key (kbd "M-/") 'hippie-expand) 

Thay vì đưa ra một kết thúc-list, liên tục nhấn chu kỳ ràng buộc-key qua hoàn tại chỗ.

Tại sao "hippie" -expand? Tôi không có ý tưởng, và tôi thực sự tránh nhìn vào chức năng vì tên là không thông minh và off-đặt, cho đến khi tôi đọc the write-up at 'Life Is Too Short For Bad Code'. (Các EmacsWiki entry on hippie-expand cũng hỏi "tại sao 'hippie?'" Nhưng cũng không thể trả lời nó.)

19

Bạn muốn mở rộng dabbrev, được gắn với M-/theo mặc định. Tôi đã không sử dụng Vim, nhưng từ mô tả của bạn, nó không chính xác điều tương tự.

+2

Điều đáng lưu ý là nếu M-/không đưa ra những gì bạn muốn lần đầu tiên, nhấn nó liên tục sẽ quay vòng qua các kết quả phù hợp. – Boojum

+0

Đây sẽ là câu trả lời thứ nhất, với các lựa chọn thay thế thứ hai. – drozzy

0

Vấn đề, theo ý kiến ​​của tôi là hoàn thành emacs tôi đã thử không hoàn thành về ngữ cảnh.

Ví dụ, nếu bạn viết một số OOP với một phương thức foobar() và một đối số foo, M-/sẽ đề nghị bạn cả foo và foobar.

Nhưng sẽ rất tuyệt nếu bạn đang gọi một phương thức đối tượng, không chỉ để hoàn thành "foo".

Có ai là giải pháp không?

+0

Không phải là một vấn đề lớn đối với tôi. Hoàn thành đáng tin cậy cho C++ là rất khó. –

0

Aif> Điều này đòi hỏi nhiều hơn những gì "mở rộng hippie" cung cấp. Nếu bạn mã C/C++ bạn CÓ THỂ sử dụng ECB http://ecb.sourceforge.net/ nhưng thẳng thắn, dự án là khá chết và addon này không phải là rất đáng tin cậy. Nếu bạn cần hoàn thành thông minh thực sự tốt, bạn nên thử Eclipse (CDT). Nhưng nếu bạn mã python thì Emacs (rope + flymake) cũng tốt như Eclipse (PyDev).

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