概要
tmuxとはターミナルマルチプレクサの略で、主にターミナルで複数のセッション管理ができるツールである。
セッション管理以外にも画面分割をしたり、Vimのキーバインドでターミナル内の文字列をコピー&ペーストができる。
10年以上前に教えてもらって長らくターミナルと組み合わせて使っていたのだけど、最近ではSSHをすることも少なくなり、セッション管理としての用途はほぼ使わなくなってきたものの、画面の分割やコピペはまだまだ重要な機能として使っている。
特に、証跡としてterraform plan
結果をガッとコピーしてSlackのテキストスニペットに貼り付けるなどで多用しているし、ターミナルを遡るスクロールにもVimキーバインドが便利なので活用していた。
課題
先述の通り、セッション管理としてはほぼ使っておらず、無くても困らなくなってきた。
なので画面分割とコピペができれば十分なのである。
また、tmuxはどうしても重くなりがちで、zshのcompletion系も相まって、起動が遅かったりする。
他にもVSCodeのターミナルとtmuxの相性が悪かったりするので、VSCodeのターミナルモードをやめることにもなった。
長らくiTerm2+tmuxを使っていたが、数年前にやめてVSCode+tmuxにしつつ、バグったりするのが嫌でこの間までAlactritty+tmuxを使っていた。
AlacrittyもRustで書かれていて動作は軽快だったが、複数ウィンドウを作成できないことからtmuxを抜け出せずにいた。
そこで、Weztermにたどり着いた。
要件
- 複数ウィンドウを管理できる
- Vimキーバインドでコピー&ペースト、移動ができる
- Vimキーバインドで画面の分割ができる
使ってみて
まず、WeztermはAlactittyと異なり、アプリケーション側で複数のウィンドウをタブで管理ができる。
つぎに設定ファイルをLuaで記述することができ、かなり柔軟に対応することができる。
結果、下記の設定で、tmuxの画面分割、およびVimキーバインドでコピー&ペーストができるようになった。
$HOME 直下にある ~/.wezterm.lua
が設定ファイルなので修正すればOK.
-- Pull in the wezterm API
local wezterm = require 'wezterm'
-- This will hold the configuration.
local config = wezterm.config_builder()
local config = {
-- Font
font = wezterm.font {
family = 'Hack Nerd Font Mono', weight = 'Bold',
},
font_size = 16.0,
color_scheme = 'Dracula (Gogh)',
-- KeyBindings, Ctrl+o で2秒以内に下記Keysを実行することで実行される
leader = { key = 'o', mods = 'CTRL', timeout_milliseconds = 2000 },
-- Split pane, | で縦に分割、- で横に分割、vでコピーモード(Visualmode的な)に入り、hjklで移動
keys = {
{
key = '|',
mods = 'LEADER|SHIFT',
action = wezterm.action.SplitPane {
direction = 'Right',
size = { Percent = 50 },
},
},
{
key = '-',
mods = 'LEADER',
action = wezterm.action.SplitPane {
direction = 'Down',
size = { Percent = 50 },
},
},
-- Enable copy mode
{ key = 'v', mods = 'LEADER', action = wezterm.action.ActivateCopyMode },
-- Move pane
{ key = 'h', mods = 'LEADER', action = wezterm.action.ActivatePaneDirection 'Left' },
{ key = 'j', mods = 'LEADER', action = wezterm.action.ActivatePaneDirection 'Down' },
{ key = 'k', mods = 'LEADER', action = wezterm.action.ActivatePaneDirection 'Up' },
{ key = 'l', mods = 'LEADER', action = wezterm.action.ActivatePaneDirection 'Right' },
},
-- Window
window_background_opacity = 0.90
}
-- and finally, return the configuration to wezterm
return config
感想
Warp辺りも検討したのだけど、軽量で必要最低限の機能+上記要件が満たせるターミナルを探していたのでWeztermに乗り換えてとても良かった。
もし、私と同じような状況だったり、単純にターミナルをお探しの方がいたらこの設定とともにおすすめしたい。
逆におすすめのWeztermの設定があれば教えてくれたら嬉しいです。