NeoVimに閉じ籠る為のToggletermとGit, DockerのTUI
株式会社トリドリのfujitaniです。
NeoVimから離れずに開発したいですよね?😈
今回は開発作業に頻出の下記3つをNeoVimセッション内で完結させる為のプラグインを紹介します。
- ターミナル操作
- Git
- Docker
Toggleterm.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
基本的にGit操作でできないことがない上に、NeoVim上から直接起動できる優秀なプラグインです。
自分はPacker経由でインストールして使っています。
視覚的にもわかりやすい上に、helpが日本語化されていてうれしい
※ 設定ファイルは後述のdiffviewと一緒に↓
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
Rust製のDockerTUIです。
競合にはdocuiやlazydockerがありますが、個人的にはこれが一番体験が良いです。
あとはdeamon起動コマンドがあればもうDockerDesctopを触らなくていいかも。
exec
コンテナを指定してexecコマンドを実行すると、oxkerからコンテナのshellに入れます。
基本的にコンテナで作業する時はnvimのtoggletermで開いたターミナルからoxkerを起動して、execコマンドでコンテナに入っています。docker compose exec
とか打つのはめんどくさいですからね。
この辺を揃えておけば「NeoVimセッションから出ずに開発を進める」ことに関しては事足りると思います。
皆さんのNeoVimライフに幸せが訪れますように...
Discussion