📟

Neovim用のターミナルプラグインを作った話

2023/04/24に公開

はじめに

これは Vim駅伝 4/24の記事です。

自作プラグインの宣伝記事になります。

https://github.com/uga-rosa/ugaterm.nvim

これはなに

Neovim 専用のターミナルプラグインです。
いくつかのコマンドを提供します。

  • 操作デモ
    demo

インストール・設定

Lua 製のプラグインですが、インストールするだけで使えます。

setup() は設定を変更したい場合に使ってください。

require("ugaterm").setup({
  ---@type string The terminal buffer name prefix.
  prefix = "terminal://",
  ---@type string The filetype for a terminal buffer.
  filetype = "ugaterm",
  ---@type string|function The command/function to open a teminal window.
  open_cmd = "botright 15sp",
  -- Example of opening in a floating window.
  --
  -- open_cmd = function()
  --   local height = vim.api.nvim_get_option("lines")
  --   local width = vim.api.nvim_get_option("columns")
  --   vim.api.nvim_open_win(0, true, {
  --     relative = "editor",
  --     row = math.floor(height * 0.1),
  --     col = math.floor(width * 0.1),
  --     height = math.floor(height * 0.8),
  --     width = math.floor(width * 0.8),
  --   })
  -- end,
})
  • prefix
    • これに番号を付けたものが terminal buffer 名になります(terminal://1, terminal://2, etc.)。
  • filetype
    • terminal buffer に設定されるファイルタイプです。
  • open_cmd
    • terminal window を開くためのコマンドです。文字列 or Lua 関数を受け付けます。
    • 文字列は EX コマンドとして解釈されます(vim.cmd()に渡されます)。
    • デフォルトでは分割です(下、15行)。IDE ぽいですね。

使い方

EX コマンドを使って terminal を操作します。
:UgatermToggle, :UgatermNew, :UgatermSelect あたりがよく使うと思うので、マッピングするならこれらかなと思います。

増える可能性もあるので、使う際には一応 doc も見てください。

  • :UgatermOpen

    • terminal window を開きます。
    • 最近使用した(Most Recently Used) terminal buffer が選ばれます。
    • terminal buffer が一つもない場合は :UgatermNew が呼び出されます。
  • :UgatermNew

    • 新規で terminal buffer を開きます。
    • terminal window は、開いていなければ開きます。
  • :UgatermHide

    • terminal window を閉じます。
  • :UgatermToggle

    • :UgatermOpen:UgatermHide をトグルします。
  • :UgatermSelect

    • vim.ui.select() を使用して terminal buffer を選択します。
  • :UgatermDelete

    • 現在開いている terminal buffer を削除します。
    • 他に terminal buffer がある場合は terminal windows は維持され、次の buffer を開きます。
    • その buffer が最後の場合は、window も閉じます。
  • :UgatermRename [{newname}]

    • 現在の terminal buffer の名前を変更します。
    • {newname} を省略した場合は vim.ui.input() が使用されます。

最後に

とても多機能だったり特別な機能があるわけではありませんが、実装をシンプルにしておりメンテナンス性は高いです。
近年の Neovim plugin 界隈は流行り廃りが非常に激しいため、自作して自分でメンテすることにしました。
良ければ使ってみてください。

GitHubで編集を提案

Discussion