🏛️

NeoVimに閉じ籠る為のToggletermとGit, DockerのTUI

2024/08/13に公開

株式会社トリドリのfujitaniです。
NeoVimから離れずに開発したいですよね?😈
今回は開発作業に頻出の下記3つをNeoVimセッション内で完結させる為のプラグインを紹介します。

  • ターミナル操作
  • Git
  • Docker

Toggleterm.nvim

https://github.com/akinsho/toggleterm.nvim
nvimセッション内でターミナルを開く機能を提供するプラグインです。
shellの状態は永続化され、開閉のコマンドも独自に設定できます。
ターミナル内でmode切り替えを使用できるので、カーソル移動やyankもvimと同じ操作で使用できるのが推しポイント。

これを利用すれば、nvim内でnvimを開くこともできたりします。一応

自分のtoggleterm設定は下記

require("toggleterm").setup{
  size = 100,
  open_mapping = [[<c-t>]],
  hide_numbers = true,
  shade_filetypes = {},
  shade_terminals = true,
  shading_factor = 2,
  start_in_insert = true,
  insert_mappings = true,
  persist_size = true,
  direction = 'float',
  close_on_exit = true,
}

Git

lazygit.nvim

https://github.com/jesseduffield/lazygit
Golang製のGitTUIです。
基本的にGit操作でできないことがない上に、NeoVim上から直接起動できる優秀なプラグインです。
自分はPacker経由でインストールして使っています。

視覚的にもわかりやすい上に、helpが日本語化されていてうれしい

※ 設定ファイルは後述のdiffviewと一緒に↓

Diffview.nvim

https://github.com/sindrets/diffview.nvim
上記にてベタ褒めしたlazygitの微妙な点としては現状2点挙げられます。

  • diffの視認性がイマイチ
  • MergeEditorが使いにくい

この辛みを感じるのは主にコンフリクト解消時や大きなdiffを確認したい時、コードレビュー時になりますが、この時はDiffview.nvimを使用します。

diffが一目で確認でき、lazygitと重複していますがDiffview.nvimからでも簡単なGit操作が行えます。
コンフリクトしていないので例示できていませんが、MergeEditorとしても機能し、個人的にはGitCliのmergetoolよりも確実に使いやすいです。

lazygit含めたgit関連の設定は下記

require('gitsigns').setup {}
local status, git = pcall(require, "git")
if (not status) then return end

git.setup({
  keymaps = {
    blame = "<Leader>gb",
    browse = "<Leader>go",
  }
})

local map = vim.api.nvim_set_keymap
local opts = { noremap = true, silent = true }

-- lazygit
map('n', '<leader>g', ':Lazygit<CR>', opts)

-- diffview
require("diffview").setup()
map('n', '<leader>df', ':DiffviewOpen<CR>', opts)

-- neogit
local neogit = require('neogit')
neogit.setup {}
require("diffview").setup()
  • gitsignsも使用していますが今回はスコープ外
  • 弊社CTOがEmacsとMagitを勧めてくるのでNeoVim用MagitクローンのNeoGitを入れてはいますが、使ってないな...

Oxker

https://github.com/mrjackwills/oxker

Rust製のDockerTUIです。
競合にはdocuilazydockerがありますが、個人的にはこれが一番体験が良いです。
あとはdeamon起動コマンドがあればもうDockerDesctopを触らなくていいかも。


exec

コンテナを指定してexecコマンドを実行すると、oxkerからコンテナのshellに入れます。
基本的にコンテナで作業する時はnvimのtoggletermで開いたターミナルからoxkerを起動して、execコマンドでコンテナに入っています。docker compose execとか打つのはめんどくさいですからね。


この辺を揃えておけば「NeoVimセッションから出ずに開発を進める」ことに関しては事足りると思います。
皆さんのNeoVimライフに幸せが訪れますように...

toridori tech blog

Discussion