---
# System prepended metadata

title: coc.nvim hoverまわりの設定

---

# coc.nvim hoverまわりの設定

カーソルを移動させるたびに `CocActionAsync('doHover')` でホバーを行っている。\
ファイルを開いた直後は LS が起動してないこともあるので適当に2秒またせてる

```vimrc
" フラグの初期化
let g:can_hover = v:false
" ファイルを開いたときに2秒後にフラグをリセットする
autocmd BufReadPost * call timer_start(2000, { -> execute('let g:can_hover = v:true') })
" カーソルが動いたときにホバーを実行
autocmd CursorMoved * if g:can_hover && index(['typescript', 'typescriptreact', 'javascript', 'zig', 'json', 'haskell'], &filetype) >= 0 |
  \ silent! call CocActionAsync('doHover') |
\ endif
```


ホバーによって表示させたポップアップウィンドウの中にカーソルを移動させたいことがある。その内容を yank したいことがあるため。
その場合以下のように設定する。

#### 1.

`:CocConfig` にて↓のように floatConfig を指定する。

```json
{
  "hover.floatConfig": {
    "focusable": true
  }
}
```

floatConfig は hover 以外にも設定できるっぽいため、他にもカーソルを移動させたいポップアップがあれば、同様に focusable を指定するとよさそう。

#### 2.

`<Leader>p` を押すとホバーのフローティングウィンドウを行き来するように設定する。\
どうやら、ホバーで作成されるウィンドウの番号は必ず一番大きな数字 (=`winnr("$")`) になるらしいため、以下のように設定する。

```vimscript
nnoremap <Leader>p :if winnr() == winnr("$")<Bar>wincmd p<Bar>else<Bar>execute winnr("$") . "wincmd w"<Bar>endif<CR>
```