AlacrittyとNeovimでGitHub Copilotの補完候補切り替えを動作するようにした
2023-08-31
追記(2023-09-03)
Alacrittyの設定ファイルを追記したらAltキーでも動きました。
window:
option_as_alt: OnlyLeft
追記の参考サイト
はじめに
最近 GitHub Copilot を Neovim(nvim) で使っています。自分は最初知らなかったのですが Copilot が提案するコードは最初に表示しているコード以外にも、複数の補完候補(suggestions)を表示してくれます。この補完の切り替えはnvim の Copilot プラグインでは、Alt + ]
、Alt + [
などのAlt + なにか
に割り当てらています。しかし、自分の環境で試したところ、このキーを入力すると補完が選択できずに文字列(‘
や“
)に化けてしまいうまく動きませんでした。
この問題を解決するためにキーバインドを切り替えた時の話です。自分の環境は以下のとおりです。
ツール | バージョン |
---|---|
mac(M1 MAX) | Ventura 13.4.1 |
nvim | 0.9.1 |
Alacritty | 0.12.1(1) |
キーバインド方法
どうやらそもそもこの現象が起こる理由が Alt キーが META キーとして上手に認識していないのが原因で使用しているターミナルアプリの問題のようでした(もしかしたら違うかも)。iTerm2 などでは設定について説明があったりしたのですが Alacritty で解決方法がうまく見つけることが出来ませんでした(見つけて実際に試しても問題は解決しませんでした…)。
で色々調べると Alt キーを入力したときに出てくる文字列を直接キーマップに設定している例があって試したら動きました。
vim.keymap.set('i', '‘', '<Plug>(copilot-next)', { noremap = true, silent = true })
vim.keymap.set('i', '“', '<Plug>(copilot-previous)', { noremap = true, silent = true })
自分は上記のキーマップは使いづらかったので、Control に割り当てるようにしました。
vim.keymap.set("i", "<C-j>", "copilot#Next()", { expr = true, silent = true })
vim.keymap.set("i", "<C-k>", "copilot#Previous()", { expr = true, silent = true })
あと、タイトルとは直接関係ないのですが、補完候補を決めて Accept すると変な文字列も一緒に入力される問題があったので以下のように設定しています。replace_keycodes = false
が大事みたいです。
vim.keymap.set("i", "<C-l>", 'copilot#Accept("<CR>")', { expr = true, silent = true, replace_keycodes = false })
最後に
根本原因の解決にはなっていませんが nvim 上で Copilot の補完の切り替え(cycle suggestions)が動作するようになりました。
業務で全くやったことのない Rails をやっているのですが Copilot に非常に助けられています!本当に便利〜