Code automatische Vervollständigung mit Efeu

11

In einem großen C ++ - Projekt verwende ich dabberv-expand (auch bekannt als M- /). Rtags, ctags, csope usw. funktionieren aus verschiedenen Gründen nicht. Leider weiß ich nicht, wie ich Dabbrev erzwingen soll, um eine Fuzzy-Suche zu verwenden. Also habe ich mich für Efeu entschieden. Der folgende Code macht fast alles, was ich will:

(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))))))

Eines fehlt. Die Vervollständigung zeigt die Kandidaten im Minibuffer. Ich möchte, dass sie in einem Popup-Fenster in der Nähe des Einstiegspunkts angezeigt werden. Ich habe versucht, Ivy-Display-Funktion-Popup und Ivy-Display-Funktion-Overlay zu verwenden, aber es ist fehlgeschlagen.

Fragen: Wie werden die Kandidaten in einem Popup- oder Overlay-Fenster angezeigt? Vielleicht ist es möglich, Efeu als Backend für ein anderes Paket wie Unternehmen zu verwenden?

Alex
quelle

Antworten:

8

Was Sie wollen, können Sie erreichen, indem Sie eine neue Quelle hinzufügen completion-at-point-functions. Dies ist nicht spezifisch für ivy, ivynutzt es aber:

(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)

major-modeDrücken Sie nach diesem Setup (stellen Sie sicher, dass Sie es ordnungsgemäß mit dem Haken ausführen) C-M-i( complete-symbol), um die Liste der Abschlüsse anzuzeigen. Wenn Sie ivy-modediese Option aktiviert haben , wird diese Liste für aktuelle Versionen von inline angezeigt ivy.

abo-abo
quelle
Bitte. Wenn die Antwort auf dieser Site funktioniert, sollten Sie sie als "akzeptiert" markieren.
abo-abo