ivyでコードのオートコンプリート


11

大きなC ++プロジェクトでは、dabberv-expand(別名M- /)を使用します。Rtags、ctags、csopeなどは、さまざまな理由で機能しません。あいにく、あいまい検索を使用するようにdabbrevを強制する方法がわかりません。そこで、ツタを使うことにしました。次のコードは、私が望むほとんどすべてを行います:

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

一つは見逃されています。補完候補はミニバッファーに候補を表示します。エントリーポイント近くのポップアップウィンドウに表示させたい。ivy-display-function-popupとivy-display-function-overlayを使用しようとしましたが、失敗しました。

質問:ポップアップウィンドウまたはオーバーレイウィンドウに候補を表示するにはどうすればよいですか?会社のような他のパケットのバックエンドとしてivyを使用することは可能でしょうか?

回答:


8

新しいソースをに追加することで、必要なものを実現できますcompletion-at-point-functions。これはに固有のものivyではありませんが、それivyを利用しています。

(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-modeフックが適切に使用されるようにしてください)、C-M-icomplete-symbol)を押して完了のリストを取得します。ivy-modeオンにしている場合、このリストはの最近のバージョンではインラインで表示されますivy


どういたしまして。このサイトで、アンワーが機能する場合は、「受け入れ済み」としてマークする必要があります。
abo-abo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.