Mã tự động hoàn thành với cây thường xuân


11

Trong một dự án C ++ lớn, tôi sử dụng dabberv-extend (hay còn gọi là M- /). Rtags, ctags, csope, vv không hoạt động bởi các lý do khác nhau. Thật không may, tôi không biết làm thế nào để thực thi dabenamev để sử dụng một tìm kiếm mờ. Vì vậy, tôi quyết định sử dụng cây thường xuân. Đoạn mã sau thực hiện hầu hết mọi thứ tôi muốn:

(defun ivy-complete ()
  (interactive)
  (dabbrev--reset-global-variables)
  (let* ((abbrev (dabbrev--abbrev-at-point))
         (candidates (dabbrev--find-all-expansions abbrev t)))
    (when (not (null candidates))
      (let* ((found-match (ivy-read "matches " candidates
                                :preselect (thing-at-point 'word)
                                :sort t))
            (abbrev-length (length abbrev)))
        (insert (substring found-match abbrev-length))))))

Một điều bị bỏ lỡ. Việc hoàn thành cho thấy các ứng cử viên trong xe buýt nhỏ. Tôi muốn chúng được hiển thị trong một cửa sổ bật lên gần điểm vào. Tôi đã thử sử dụng lớp phủ ivy-display-function-popup và ivy-display-function-overlay nhưng không thành công.

Câu hỏi: làm thế nào để hiển thị các ứng cử viên trong cửa sổ bật lên hoặc lớp phủ? Có thể sử dụng ivy làm phụ trợ cho một số gói khác như công ty không?

Câu trả lời:


8

Những gì bạn muốn có thể đạt được bằng cách thêm một nguồn mới completion-at-point-functions. Điều này không cụ thể ivy, nhưng ivysử dụng nó:

(defun dabbrev-complation-at-point ()
  (dabbrev--reset-global-variables)
  (let* ((abbrev (dabbrev--abbrev-at-point))
         (candidates (dabbrev--find-all-expansions abbrev t))
         (bnd (bounds-of-thing-at-point 'symbol)))
    (list (car bnd) (cdr bnd) candidates)))
(add-to-list 'completion-at-point-functions 'dabbrev-complation-at-point)

Sau khi thiết lập này (đảm bảo thực hiện đúng major-modecách bằng cách sử dụng hook của nó), nhấn C-M-i( complete-symbol) để nhận danh sách hoàn thành. Nếu bạn có ivy-mode, danh sách này sẽ được hiển thị nội tuyến cho các phiên bản gần đây của ivy.


Không có gì. Trên trang web này, nếu anwer hoạt động, bạn nên đánh dấu nó là "được chấp nhận".
abo-abo
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.