0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

copilot.elの設定等について

Last updated at Posted at 2025-02-26

Emacsでgithub-copilotを利用するためのcopilot.elについて解説します。

初期設定

インストール

githubにソースコードがあるので、各自インストールしてください。
leafであれば以下のように書けば、依存パッケージ含めてインストールされます。
ついでに、prog-modeでcopilot-modeがonになります。

(leaf copilot
  :vc (:url "https://github.com/copilot-emacs/copilot.el")
  :config
  (leaf editorconfig
    :ensure t
    )
  (leaf s
    :ensure t
    )
  (leaf dash
    :ensure t
    )
  :hook
  (prog-mode-hook .  copilot-mode)
)

githubにログイン

最初にgithubにログインする作業が必要になります。
M-x copilot-login からブラウザでログインできます。
認証コードがmini bufferに表示されるので、コピーして貼り付けましょう。
一度ログインできれば、認証情報は以降も保存されているので、次回以降はemacsを再起動しても大丈夫です。

キーバインドの設定

私は以下のように設定しています。
この後の各コマンドの説明を呼んで各自好きにすればいいと思います。

  :bind
  (copilot-completion-map
   ("C-e" . copilot-accept-completion)
   ("M-f" . copilot-accept-completion-by-word)
   ("C-M-f" . copilot-accept-completion-by-paragraph)
   ("M-n" . copilot-accept-completion-by-line)
   ("C-M-n" . copilot-next-completion)
   ("C-M-p" . copilot-previous-completion)
   )
  (copilot-mode-map
   ("M-i" . copilot-complete)
   )

キーマップについて

copilot.elに関連するキーマップにはcopilot-mode-mapcopilot-completion-mapがあります。
特に後者が重要で、copilotが補完を出している時のみ有効なキーマップになります。ですので、補完の決定や候補選択についてはcopilot-completion-mapにhookさせていくことになると思います。

各コマンドについて

copilot-mode

hookを設定していない場合にはM-x copilot-modeで手動で起動できます。もちろんもう一回打てばOFFになります。

copilot-complete

copilotの補完候補を表示すると同時にcopilot-completion-mapが有効になります。
copilot-modeの時には自動的に補完候補が表示されるので、copilot-idle-delayを設定していない場合はあまり出番がないです。
補完候補がない時には"No completion is available."とmini bufferに表示されます。

copilot-accept-completion

表示されている補完候補を確定します。複数行あっても全て一発で確定されます。

copilot-accept-completion-by-word

表示されている補完候補の最初の単語まで確定します。単語の後ろについている記号までは確定してくれない点が微妙に使い勝手が悪いです。例えばif __name__ == から補完しようとすると、if __name__ == "__mainで止まります。

copilot-accept-completion-by-line

表示されている補完候補の最初の行を確定します。確定される部分が明確なので使いやすい印象です。

copilot-accept-completion-by-paragraph

表示されている補完候補の最初のparagraphまで確定されます。paragraphの単位がいまいち分かってないのですが、複数行確定されるので、あんまり出番はなさそう。

copilot-next/previous-completion

補完候補が複数ある場合に、表示する候補を切り替えます。
一覧的に見れないので一個ずつ切り替えて見ていくので、corfuとかのUIに慣れているとちょっと使い辛さを感じます。

設定できる変数

copilot-idle-delay

補完パッケージでよくある、補完まで少し待つかどうかの変数。
少し使ってみた感じデフォルトの0のままでよさそう。

copilot-enable/disable-predicates、copilot-enable/disable-display-predicates

copilotの補完が表示される条件を設定する変数っぽい。デフォルトだとevilのinsert-mode向けの制御が入ってるっぽい。copilotの補完が変なところで出過ぎて鬱陶しい、みたいになったら、ここを頑張って弄るんだと思う。
基本的には弄らなくてよさそう。

copilot-clear-overlay-ignore-commands

copilotの補完が表示中に他の動作をすると、補完がリジェクトされたと判断されて消えるのだけど、ここで指定されたコマンドの場合は残るようになる、多分。
これも基本的には弄らなくてよさそう。

copilot-network-proxy

よくあるプロクシ設定のための変数。

参考にしたページとか

基本的な導入方法についてはこのページを参考にしました。
下記のキーバインドの設定がskkの補完のTabキーを奪うので色々調べ始めたのがこの記事を書くきっかけです。

  (defun my/copilot-tab ()
    (interactive)
    (or (copilot-accept-completion)
        (indent-for-tab-command)))

  (with-eval-after-load 'copilot
    (define-key copilot-mode-map (kbd "<tab>") #'my/copilot-tab))

キーバインド周りの設定はこのページを参考にしています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?