Closed5

Neovim LSPでカーソル下の変数をハイライトする機能

botamotchbotamotch

LSPでカーソル下の変数をハイライトする機能は highlight reference と呼ぶらしい。Vimでは有効になっているが、Neovimだと手動で有効にしないといけない

botamotchbotamotch

あたりを調べるとこんな記述があった。どうやって定義するのか確認する

注意: vim.lsp.buf.document_highlight() の使用は、以下のハイライトグループが定義されている必要があり、さもなければ実際のハイライトを見ることができまん。LspReferenceText , LspReferenceRead , LspReferenceWrite 。

botamotchbotamotch

とりあえずできた

  • ハイライトするまでの時間は3秒くらい。もうちょっと短くしたい
    • デフォルトは set updatetime=4000 4秒だった。0.5秒くらいにしようかな
  • ハイライトは無効になっててアンダーラインだけ。色設定適当だからしゃーない
    • autocmd ColorScheme * highlight Normal ctermbg=none guibg=noneと競合してるくさいな
    • 別にそんなことはなかった。カラースキーマに合わせて変えられないかな

vim.cmd [[
highlight LspReferenceText  cterm=underline ctermbg=8 gui=underline guibg=#104040
highlight LspReferenceRead  cterm=underline ctermbg=8 gui=underline guibg=#104040
highlight LspReferenceWrite cterm=underline ctermbg=8 gui=underline guibg=#104040
]]

require("nvim-lsp-installer").on_server_ready(function(server)
  local opt = {
    on_attach = function(client, bufnr)
      -- keymap setting ...
      vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
      vim.api.nvim_clear_autocmds { buffer = bufnr, group = "lsp_document_highlight" }
      vim.api.nvim_create_autocmd({"CursorHold", "CursorHoldI"}, {
          callback = vim.lsp.buf.document_highlight,
          buffer = bufnr,
          group = "lsp_document_highlight",
          desc = "Document Highlight",
      })
      vim.api.nvim_create_autocmd({"CursorMoved", "CursorMovedI"}, {
          callback = vim.lsp.buf.clear_references,
          buffer = bufnr,
          group = "lsp_document_highlight",
          desc = "Clear All the References",
      })
    end,
    -- capabilities setting ...
  }
  server:setup(opt)
end)
botamotchbotamotch
  • ファイル2つ開くと1つ目で動作しなくなる。要確認
    • これでちゃんと動いた。vim.api の設定のやり方が違ったのかな?
require("nvim-lsp-installer").on_server_ready(function(server)
  local opt = {
    on_attach = function(client, bufnr)
      -- keymap setting ...
      vim.cmd [[
        augroup lsp_document_highlight
          autocmd! * <buffer>
          autocmd CursorHold,CursorHoldI <buffer> lua vim.lsp.buf.document_highlight()
          autocmd CursorMoved,CursorMovedI <buffer> lua vim.lsp.buf.clear_references()
        augroup END
      ]]
    end,
    -- capabilities setting ...
  }
  server:setup(opt)
end)

このスクラップは2022/07/29にクローズされました