## 経緯
[[👤David Heinemeir Hansson|DHH]]氏が最近[[Neovim]]に移行したという話は聞いていたが、[[OMAKUB]]という[[Ubuntu 24.04 LTS(Noble Numbat)|Ubuntu 24]]用のセットアップスクリプトを公開しており、その中で[[Zellij]]の言及があったため気になったから。
[[ターミナルマルチプレクサ]]は5年以上前に[[tmux]]を使っていたことがあるが、[[tmux]]内と外で見た目や挙動が変わってしまうことがあり、[[Windows Terminal]]が誕生してタブやペイン分割の必要性がなくなってしまったので、それ以来は使っていなかった。
... が、[[Zellij]]はパッと見で[[tmux]]よりも使いやすそうだし、何より[[Rust]]で1から作られたものなので、例によってその流れにもれず興味が湧いたということ。
現時点で明らかなメリットは見いだせていないので、実験的に試してみるという位置づけである。
## 環境
- [[Windows 11]]
- [[Ubuntu 22.04 LTS(Jammy Jellyfish)]] on [[WSL]]
- [[Windows Terminal]]
## インストール
[[mise]]でv0.40.1をインストール。
```console
mise use -g zellij
```
`zellij`コマンドで起動する。
## 設定ファイルの追加
公式ドキュメントからそのまま。
<div class="link-card">
<div class="link-card-header">
<img src="https://zellij.dev/documentation/favicon.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">zellij.dev</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">Configuration - Zellij User Guide</p>
</div>
</div>
<a href="https://zellij.dev/documentation/configuration"></a>
</div>
```console
mkdir ~/.config/zellij
zellij setup --dump-config > ~/.config/zellij/config.kdl
```
## テーマの変更
早速だがデフォルトのテーマは賑やかすぎるので変更したい。
<div class="link-card">
<div class="link-card-header">
<img src="https://zellij.dev/documentation/favicon.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">zellij.dev</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<p class="link-card-title">Themes - Zellij User Guide</p>
</div>
</div>
<a href="https://zellij.dev/documentation/themes"></a>
</div>
[[Neovim]]では[[Tokyo Night (Neovim)|Tokyo Night]]を使っているのであわせる。
```kdl
theme "tokyo-night-dark"
```
## 情報量を減らす
デフォルトだと情報量が多くて気が散るため、画面下部のキーバインドを非表示にする。
```kdl
default_layout "compact"
```
## ホットキーの変更
モードのキーについて、デフォルトでは`Ctrl`を使っているが、[[Neovim]]やアプリケーションとの競合を意識したくないので **Altとの同時押しに統一**する。また、モードは1つあれば十分 ([[Neovim]]の[[Leaderキー]]的なものがあれば) なので、`Alt + w` だけ割り当てる。
```kdl
keybinds {
normal clear-defaults=true {
bind "Alt c" { Copy; }
bind "Alt w" { SwitchToMode "Pane"; }
}
pane clear-defaults=true {
bind "Esc" "Enter" { SwitchToMode "Normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "Normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "Normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "Normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "Normal"; }
bind "n" { NewPane; SwitchToMode "Normal"; }
bind "s" { NewPane "Down"; SwitchToMode "Normal"; }
bind "v" { NewPane "Right"; SwitchToMode "Normal"; }
bind "w" { CloseFocus; SwitchToMode "Normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "Normal"; }
bind "i" { ToggleFloatingPanes; SwitchToMode "Normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
bind "2" { SwitchToMode "RenamePane"; PaneNameInput 0;}
bind "Left" { MovePane "Left"; }
bind "Down" { MovePane "Down"; }
bind "Up" { MovePane "Up"; }
bind "Right" { MovePane "Right"; }
bind "t" { NewTab; SwitchToMode "Normal"; }
bind "q" { CloseTab; SwitchToMode "Normal"; }
bind "Tab" { ToggleTab; }
}
entersearch {
bind "Ctrl c" "Esc" { SwitchToMode "Scroll"; }
bind "Enter" { SwitchToMode "Search"; }
}
renametab {
bind "Ctrl c" { SwitchToMode "Normal"; }
bind "Esc" { UndoRenameTab; SwitchToMode "Pane"; }
}
renamepane {
bind "Ctrl c" { SwitchToMode "Normal"; }
bind "Esc" { UndoRenamePane; SwitchToMode "Pane"; }
}
}
```
## トラブル
### Neovimの表示がおかしくなる
以下のような黒い長方形が表示される。表示されるカーソル行に移動すると消える。内容によらずランダムに出現する模様。
![[20240727_1.avif]]
これは代表例で、もっと色々崩壊するようなケースも目にしている。
再現性の高いケースだとカラーが[[Zellij]]内と外で異なるケースがある。たとえば、構文エラーのカラーリング。
![[20240727_2.avif]]
[[Zellij]]を使っていない場合だと以下のようになる。`constaa`の文字色と、[[virtual text (Neovim)|virtual text]]の文字色が違う。
![[Pasted image 20240727213812.png]]
どちらも[[GitHub]]にいくつかIssueは挙がっていたが、いずれも解決方法を試しても解消しなかったので諦める。
> [!hint]
> カラーリングの問題は `styled_underlines false` を指定すると解消する。ただし、`undercurl`などが表示されなくなるため、別の問題が残る。
## 結局どうする?
[[Neovim]]を利用するケースではデメリットの方が大きいため、今まで通り[[Neovim]]内で[[ウィンドウ (Vim)|ウィンドウ]]を分割したり、[[toggleterm.nvim]]でターミナルを利用する方式をとる。
一方、[[Neovim]]がメインでないケースでは、[[Windows Terminal]]の分割機能やタブ機能を使う代わりに試してみようと思う。
- 分割速度や移動、状態の引継ぎなどの点で[[Zellij]]にはポテンシャルがある
- Layouts機能は仕事などで使えそうな気がする
- 仮に[[Neovim]]を開くことになっても、見た目以上の操作にはほとんど支障がない
- ガッツリ集中して開発などをしなければ実用レベルには達している
メインは[[Linux]]だが、[[Windows]]ホスト側の[[PowerShell]]をターミナルで利用することもあるため、いずれにせよ[[Windows Terminal]]の利用をやめるつもりはない。
## #2024/07/29 追記
初期でウィンドウ分割をしてコマンドを実行する以外の用途でそこまでメリットはなさそうという結論に至った。むしろ気が散って生産性が落ちてしまう。[[Windows Terminal]]と[[Neovim]]をベースにした構成は理にかなっていると個人的には思っているのもあり。
というわけで、一旦使用はとりやめる。