⚙️

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はかなり強力な機能です。使い方も多々あると思われるので、ぜひ自分で使い道を発見して共有していただけると幸いです。

参考

GitHubで編集を提案

Discussion