はじめに
そもそも僕は LazyGit を利用していたが、少々動作がもたついたり、もっさりすることがあったのと、Rust でコーディングすることが最近かなり多くなったので、Rust 製の TUI ってないんだっけ?と思って調べたのがこの Git クライアントアプリに出会ったきっかけ。
使い方が LazyGit と多少違うのと、gitui を自分なりに使うために少しセットアップが必要なのと、Neovim 上で快適に使用するにも工夫が必要だったので、その方法をまとめようと思った。
コンフィグ
コンフィグを行うファイル群は以下のパスに格納する。
| OS | コンフィグディレクトリ |
|---|---|
| Windows | %APPDATA%/gitui |
| maOS | $HOME/.config/gitui |
| linux | $HOME/.config/gitui |
基本的に、gitui のコンフィグは ron ファイル形式 で記述する様になっており、デフォルトの値をオーバーライドする形で利用する。
テーマ設定
デフォルトのテーマから変更する場合は、theme.ron ファイルを作成して対応する。
ここでの見え方は、それぞれのターミナルのテーマ設定に大きく影響を受けるため、下記の設定そのままでは「見やすい」ようにはならない点に注意
例えば以下の様に設定してみる。
(
selection_bg: Some("Green"),
disabled_fg: Some("Reset"),
cmdbar_bg: Some("Green"),
)
| デフォルト | 変更例 |
|---|---|
![]() |
![]() |
このポスト執筆時点でのデフォルト設定は、style.rs の方で確認でき、値を次のように直す事で設定ができる。
(
selected_tab: Some("Reset"),
command_fg: Some("White"),
selection_bg: Some("Blue"),
selection_fg: Some("White"),
use_selection_fg: Some(true),
cmdbar_bg: Some("Blue"),
disabled_fg: Some("DarkGray"),
diff_line_add: Some("Green"),
diff_line_delete: Some("Red"),
diff_file_added: Some("LightGreen"),
diff_file_removed: Some("LightRed"),
diff_file_moved: Some("LightMagenta"),
diff_file_modified: Some("Yellow"),
commit_hash: Som("Magenta"),
commit_time: Some("LightCyan"),
commit_author: Some("Green"),
danger_fg: Some("Red"),
push_gauge_bg: Some("Blue"),
push_gauge_fg: Some("Reset"),
tag_fg: Some("LightMagenta"),
branch_fg: Some("LightYellow"),
line_break: Some("¶"),
block_title_focused: Some("Reset"),
)
改行文字
デフォルトだと、改行に対して改行文字「¶」が入る。
さすがにこれは煩わしいので、空白にしたい。その場合は、先の theme.ron に設定を入れる。
(
line_break: Some(""),
)
| デフォルト | 変更後 |
|---|---|
![]() |
![]() |
Vim 形式キーバインディングを設定する
デフォルトでは、gitui は Vim キーマップには対応しておらず、基本的には数字キーや矢印の操作を中心としたデフォルトキーマップになっている。
これを Vim キー形式のキーマップで使用するには、key_bindings.ron コンフィグファイルを作成してキーバインディングを設定する。
最低限では以下の通り。
(
move_left: Some(( code: Char('h'), modifiers: "")),
move_right: Some(( code: Char('l'), modifiers: "")),
move_up: Some(( code: Char('k'), modifiers: "")),
move_down: Some(( code: Char('j'), modifiers: "")),
stash_open: Some(( code: Char('l'), modifiers: "")),
open_help: Some(( code: F(1), modifiers: "")),
status_reset_item: Some(( code: Char('U'), modifiers: "SHIFT")),
)
サンプルの拡張 Vim キーマップ
更に Vim キーマップを広げる場合には、以下を設定する。
(
open_help: Some(( code: F(1), modifiers: "")),
move_left: Some(( code: Char('h'), modifiers: "")),
move_right: Some(( code: Char('l'), modifiers: "")),
move_up: Some(( code: Char('k'), modifiers: "")),
move_down: Some(( code: Char('j'), modifiers: "")),
popup_up: Some(( code: Char('p'), modifiers: "CONTROL")),
popup_down: Some(( code: Char('n'), modifiers: "CONTROL")),
page_up: Some(( code: Char('b'), modifiers: "CONTROL")),
page_down: Some(( code: Char('f'), modifiers: "CONTROL")),
home: Some(( code: Char('g'), modifiers: "")),
end: Some(( code: Char('G'), modifiers: "SHIFT")),
shift_up: Some(( code: Char('K'), modifiers: "SHIFT")),
shift_down: Some(( code: Char('J'), modifiers: "SHIFT")),
edit_file: Some(( code: Char('I'), modifiers: "SHIFT")),
status_reset_item: Some(( code: Char('U'), modifiers: "SHIFT")),
diff_reset_lines: Some(( code: Char('u'), modifiers: "")),
diff_stage_lines: Some(( code: Char('s'), modifiers: "")),
stashing_save: Some(( code: Char('w'), modifiers: "")),
stashing_toggle_index: Some(( code: Char('m'), modifiers: "")),
stash_open: Some(( code: Char('l'), modifiers: "")),
abort_merge: Some(( code: Char('M'), modifiers: "SHIFT")),
)
*こちら @torinos0909 さんからコメントで教えてくださいました(ありがとうございます!)
コンフィグの管理
例によって、コンフィグは Git 管理しておき、共有できるようにし、シンボリックリンクで各環境で使用できるよにしておく。
Neovim 上で、gitui を立ち上げられるようにする
Neovim 上で TUI である gitui を立ち上げるというのは、ターミナルパネルを開いて立ち上げるという意味ではなく、フローティングウィンドウで開けるようにするという事。
つまりこんな感じ。
下記 LazyGit の様に、LazyVim デフォルトの実装ではないため、Neovim 上ですぐに gitui を立ち上げられるようにするには少し工夫が必要。
しかし、やろうと思えばできるのである。(素晴らしい!!
これを可能にさせるには akinsho/toggleterm.nvim を利用する。
僕はプラグインマネージャーに LazyVim を使用しているので、以下の方法で導入を行う。
LazyVim に関しては次の記事を参照。
プラグインコンフィグ
以下の様にプラグインコンフィグを作成する。
return {
{
"akinsho/toggleterm.nvim",
config = function()
require("toggleterm").setup({
direction = "float", -- 浮動ウィンドウで表示
float_opts = {
border = "curved",
},
})
-- gitui 起動用の関数を定義
local Terminal = require("toggleterm.terminal").Terminal
local gitui = Terminal:new({
cmd = "gitui",
hidden = true,
direction = "float",
-- 閉じた時にバッファを削除
on_open = function(term)
vim.cmd("startinsert!")
-- ターミナル内でのキー操作設定(任意)
vim.api.nvim_buf_set_keymap(term.bufnr, "n", "q", "<cmd>close<CR>", {noremap = true, silent = true})
end,
})
function _gitui_toggle()
gitui:toggle()
end
-- キーマッピング (例: <leader>gg)
vim.keymap.set("n", "<leader>gu", "<cmd>lua _gitui_toggle()<CR>", { desc = "GitUI (Float)" })
end,
},
}
これで次の様に Neovim 上のキーマップ操作で立ち上げることが出来るようになる。
gitui のこれから
gitui はまだ 1.0 ではないが、1.0 に至るまでのロードマップが公開されている。
これらが完了次第、1.0 は公開されるだろう。こちらに期待したい。








