## 事象 [[nvim-cmp]]はデフォルトの設定だと、候補が表示されたとき1つめの候補が選択されない。 ![[2024-02-04-18-14-38.webp|frame]] Enterを押せば候補の補完自体はできるが、フォーカスされていないとドキュメントが読めないので不便。 ## 原因 [[nvim-cmp]]はデフォルトだと、[[completeopt]]の設定が`"menu,menuone,noinsert,noselect"`になっているから。`noselect`があるので自動で選択されない。 ## 解決方法 [[completeopt]]に`noselect`を除いた値をセットする。 ```lua config = function() local cmp = require("cmp") cmp.setup({ completion = { completeopt = "menu,menuone,noinsert", -- "noselect"を除外した残り }, ``` ただ、この設定はすべてに効くため、[[cmp-cmdline]]のように **Enterで補完の確定はせず、Tabボタンで補完する** 挙動と相性が悪い。1つ目が選択されていることが悪い方向に働く。 - Enterを押しても補完の内容ではなく入力内容でコマンドが実行される (意味がない) - Tabを押すと2つ目が選択されてしまう (1つ目を素早く選択する方法がない) 個別に`completion.completeopt`を設定することで回避できる。この場合は[[cmp-cmdline]]のsetupで`noselect`を追加している。 ```lua cmp.setup.cmdline(":", { completion = { completeopt = "menu,menuone,noinsert,noselect", }, }) ``` ## 参考 - [Feature request: Allow preselect to select the first item · Issue \#1621 · hrsh7th/nvim\-cmp](https://github.com/hrsh7th/nvim-cmp/issues/1621)