⚙️
Neovimのextuiであそぼう
こんにちは、yank.nvimです。現状Neovimのnightly版またはHEADビルドで使用可能なextuiについて簡単な使い方と、自分が使っている設定を紹介します。
使い方
有効化するためにはこのような設定をします。
init.lua
local ok, extui = pcall(require, "vim._extui")
if ok then
extui.enable({
enable = true,
target = "box", -- メッセージをコマンドラインに出す("cmd")か、画面右下にフローティング表示する("box")か
timeout = 4000, -- メッセージがタイムアウトするまでの時間
})
end
お好みでcmdheight=0も。
init.lua
vim.opt.cmdheight = 0
主な機能
コマンドラインのシンタックスハイライト

ハイライトがつく
コマンドにシンタックスハイライトが効くようになります。
:messageなどのフローティング化
:messageなどがフローティングウィンドウになり、出力をコピーできます。
他のフローティング化するコマンドについてはkawarimidoll氏の記事にまとめられています。
echoのフローティング表示

target = "box"
target = "box"を指定すると、echoなどが右下にフローティング表示されます。表示が消えるまでの時間はtimeoutで指定できます。
設定例
先ほどの設定に追加して、自分は次のような設定をしています。
lua/config/extui.lua
vim.opt.cmdheight = 0
local ok, extui = pcall(require, "vim._extui")
if ok then
extui.enable({
enable = true,
target = "box",
timeout = 4000,
})
-- ここから追加部分
vim.api.nvim_create_autocmd("LspAttach", { callback = function (ev)
local client = vim.lsp.get_client_by_id(ev.data.client_id)
vim.api.nvim_echo({ {"["}, {client.name}, {"] Attached"} }, true, {})
end
})
vim.api.nvim_create_autocmd("LspProgress", {
callback = function (ev)
local value = ev.data.params.value
local client = vim.lsp.get_client_by_id(ev.data.client_id)
local status = vim.lsp.status()
if value.kind == "begin" then
id = vim.api.nvim_echo({ {"["}, {client.name}, {"] "}, { value.title }}, true, {})
elseif value.kind == "end" then
vim.api.nvim_echo({ {"["}, {client.name}, {"]"}, { value.title }}, true, {})
end
end
})
end
この設定により、先ほどの画像に写っていたような、fidget.nvimなどで行っていたようなLSPのステータス表示ができます。
みんなも使ってね
extuiはかなり強力な機能です。使い方も多々あると思われるので、ぜひ自分で使い道を発見して共有していただけると幸いです。
Discussion