## 事象
[[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)