会社モードを使用したファイル名補完


11

init.elで次のコマンドを使用して会社を有効にしました。

(require 'company)
(add-hook 'after-init-hook 'global-company-mode)

ただし、ソースにプロバイダがあり、ウェブサイトでサポートされていると記載されていますが、ファイル名の補完は行われていません。

/ home / emmanuel ...と入力し始めますが、何も起こりませんが、補完がオプションの提供を開始することを期待していますか?

また、会社モードの相対パスの自動検出はどのように自動検出されますか?サポートされていると思いますが、最初の "/"をヒントにしないと、どのように検出されるのかわかりません。


1
会社モードを介してオートコンプリートを実行しようとしているメジャーモードについて言及する必要があります。それとも、ミニバッファでファイル名の補完を探しているのでしょうか?ご指定ください。
パプリカ

1
私は完全に初心者です。私が理解しているすべての主要なモード(lisp、プレーンテキスト、任意のプログラミング言語)で使用したいと思います。実際、単純なキーワード補完(バッファー内の別の場所で使用されている単語を提供する)は、lisp編集や他のモードで機能するように見えます。
Emmanuel Touzery 2014年

私は後でHaskellについてもより強力な補完を試みますが、それはhaskell-modeについてのみであり、今のところ、その機能をすべてのモードで機能させることを目指しています。
Emmanuel Touzery 2014年

回答:


8

company-filesファイル補完のために実行する必要があります。次のコマンドを使用して、ファイル完了の完了に別のマップをバインドできます。

(define-key global-map (kbd "C-.") 'company-files)

また、会社のファイルが会社のバックエンドにあることを確認してください(M-x>カスタマイズグループ>会社>会社のバックエンド)


ファイル名を補完するために、必ずしもキーをバインドする必要はありません。ここで重要なのは、構成することcompany-backendsです。たとえばcompany-files、そのリストの最初に置くか、グループバックエンドに含めることができます。
グルカ2014年

トリガーするための関数を記述しcompany-filesたり、何かを設定したりする必要があると思います。少なくとも私にとっては、たとえそれが入っていても自動的にトリガーされませんcompany-backends
ジェシー14年

リストの前に他のバックエンドがあるためだと思いますか?会社モードは、現在のプレフィックスを処理できることを示す最初のバックエンドを使用します。リストcompany-filesの最初に挿入すると、company-backends自動補完されます。もちろん、これはあなたが実際に望んでいることではないかもしれません、ただファイルのバックエンドが単なる別のバックエンドであることを指摘しています...
glucas

確かに、私はそれを知りませんでした。私はvimユーザーをemacsに移行しています。vimでは、特定の場合にファイル補完が自動的にトリガーされ、他の場合にはコード補完がトリガーされました。それが理想だと思います。
Jesse

モードフックを使用して、さまざまなモードのバックエンドのさまざまなリストを指定できます。lispモードではたとえば、あなたは、シンボル補完をしたいとあなたはファイル名補完を追加するシェルスクリプトなどのためにも
glucas

15

@Jesseがすでに指摘したように、ここで必要なのはcompany-filesバックエンドです。それを使用するには、いくつかの異なる方法があります。

  1. キーをバインドしてcompany-files直接呼び出す。

  2. コマンドを使用しcompany-begin-backendます。これにより、バックエンドを使用するように求められ、補完候補が提示されます。

  3. company-other-backendバックエンドのリストを循環するために使用します(次の項目を参照)。これは、完了をトリガーするために使用できます。または、企業モードがトリガーされた後に、別の完了候補のセットに切り替えるために使用できます。たとえば、会社マップでキーバインディングを割り当てることができます。(define-key company-active-map (kbd "C-e") #'company-other-backend)

  4. 変数を設定しますcompany-backends。会社モードは、現在のプレフィックス(つまり、ポイントの前のテキスト)を受け入れるバックエンドを見つけるために、このリストをたどります。現在のプレフィックスを受け入れるバックエンドをリストに含めることは完全に可能ですが、補完候補は提供されません。この時点で、企業モードは何も自動補完しません。リストをカスタマイズして、ニーズを満たす方法でバックエンドを並べ替えることができます。

変更のいくつかの例company-backends

ファイル名を完成させたいだけの場合は、それを唯一のバックエンドにすることができます。

(setq company-backends '(company-files))

それはありそうにないので、最も一般的に使用されるバックエンドを最初に配置し、次に、前述のオプションの1つを使用して、バックエンドを切り替えるか、何か他のものが必要なときに名前で呼び出す方がよいでしょう。

マージされた補完候補のセットを作成する「グループ」バックエンドを設定することもできます。たとえば、これを試してください:

(setq company-backends '((company-capf company-dabbrev-code company-files)))

これは、他の3つのバックエンドの候補をマージする単一のバックエンドを指定します。これは、完了時点、dabbrev、およびファイルシステムからの結果を提供します。

モードフックを使用して、さまざまなメジャーモードに対してさまざまなバックエンドのセットを指定できます。例えば:

(add-hook 'org-mode-hook
          (lambda ()
            (setq-local company-backends '((company-files company-dabbrev)))))

(add-hook 'emacs-lisp-mode-hook
          (lambda ()
            (setq-local company-backends '((company-capf company-dabbrev-code)))))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.