/ tmux+AracrittyをやめてWeztermに移行する

Created Thu, 01 Aug 2024 22:50:49 +0900
1346 Words

概要

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の設定があれば教えてくれたら嬉しいです。