Zenn
💲

逆引きWezTerm設定

2025/03/16に公開

前置き

最近、WindowsではTera Termから、MacではiTerm2から、それぞれ、WezTermに乗り換えました。Tera Term, iTerm2いずれも大きな困りごとはなかったのですが、Tera Termはtrue color未サポート、iTerm2では、ウィンドウのアクティブ化がちょっと重い気がする、などもあり、乗り換えてみまいた。

true colorで表示されるVim/Neovimのテーマはいい感じですし、なにより設定をテキストで書けるのがとてもよい体験で、気に入ってます。ウィンドウのアクティブ化が重い云々はあまり変わってない気がする。

とはいえ移行するための設定ではいろいろ苦労しました。せっかくなので苦労した個所を、逆引きリファレンスみたいな形で残しておきます。誰かのなにかの参考になれば。

(この記事は1項目未実装です。気が向いたら書きます。)

逆引きWezTerm設定

起動時のウィンドウ位置を指定する

単純に設定で対応することはできないようです。gui-startupにフックして、wezterm.mux.spawn_windowで位置を渡す必要があるようです。

wezterm.on('gui-startup', function()
    wezterm.mux.spawn_window({
        position = {
            x = 200,
            y = 100,
        },
    })
end)

参考: Set initial window position before a window is created · Issue #2976 · wezterm/wezterm

起動時のウィンドウサイズを指定する

文字セル数単位でサイズを指定する形でよければ、initial_cols, initial_rowsを指定するだけです。

config.initial_cols = 160
config.initial_rows = 40

私の好み的にはこれで問題ないのですが、本当にウィンドウのサイズを明示的に指定したい場合の方法は、調べた限り見つかりませんでした。

画面一杯にする

画面一杯にする場合、Macではinitial_cols, initial_rowsの値を十分に大きくすることでも可能ですが、Windowsではメモリを異常に消費し、起動に時間がかかるなど現実的ではなさそうでした。

そのようなことをしなくとも、普通に設定する方法がありました。起動時のウィンドウ位置を指定する同様、gui-startupにフックします。

wezterm.on('gui-startup', function()
    local _, _, window = wezterm.mux.spawn_window({})
    window:gui_window():maximize()
end)

参考: maximize - Wez's Terminal Emulator

ただしこの方法は、今度はMacで起動時にアニメーションが入ってしまいます。私はWindowsではmaximizeを、Macではinitial_cols, initial_rowsを使うようにしています。

フルスクリーンにする

画面一杯にするでのmaximizeの代わりにtoggle_fullscreenを使います。

wezterm.on('gui-startup', function()
    local _, _, window = wezterm.mux.spawn_window({})
    window:gui_window():toggle_fullscreen()
end)

参考: toggle_fullscreen - Wez's Terminal Emulator

TODO: ウィンドウの見た目をカスタマイズする

window_decorations, window_frame, window_padding辺りについて、スクリーンショットつきで書きたい。

Windowsで、WSLにSSHで接続する

WSLには、config.default_domain = 'WSL:Ubuntu'のような形でwslhost.exeを通して接続することもできますが、SSHで接続した方が速い気がします。私の環境ではシェルが初期化されて入力を受け付けるようになるまでの時間が1秒くらい違いました。

config.default_domain = 'wsl-ssh' -- `config.ssh_domains.name`に指定したものを
config.ssh_backend = 'Ssh2'
config.ssh_domains = {
    {
        name = 'wsl-ssh', -- なんでもいい
        remote_address = 'localhost:22', -- portを変えたりしている場合はそれに合わせる
        username = <USERNAME>,
        multiplexing = 'None',
    },
}

上記のように設定することで、起動時にWSLに接続します。この辺の設定にはいくつか罠があるのでざっくり説明します。

config.ssh_backend = 'Libssh'(デフォルト値)はSSHエージェントに対応していない

Libsshの方が、暗号回りのサポートがよかったりするようで、そのためにデフォルトはこちらになっているようです。が、LibsshはSSHエージェントに対応していないため、SSHエージェントを使って接続したい場合はSsh2を使うしかありません。

Usage of wezterm ssh with ssh-agent on Windows 11 · wezterm/wezterm · Discussion #3772 こちらの話が少し関連していますが、私は特にWindows側の~/.ssh/configは設定していません。

なおこれだけではSSHエージェント転送は動かないはずです。エージェント転送もしたい場合は、wsl2-ssh-agentを使うのが私の知る限り現時点ではベストそうです。(ただし、Pageantとは連携できなそう。)

参考:
ssh_backend - Wez's Terminal Emulator
wsl2-ssh-agent: WSL2からssh-agent.exeサービスへのブリッジ

multiplexing = 'None'を設定しないと接続時に落ちる

これを設定しないと、接続先にWezTermが必要なようです。

参考: object: SshDomain - Wez's Terminal Emulator

Macで日本語IME(AquaSKK/macSKK)を使う

iTerm2では、AquaSKK用の設定があり、それをオンにするだけで一通り入力に問題はなかったのですが……。WezTermではそのままではAquaSKK/macSKKはうまく動作しないようです。変換中もCtrlとのコンビネーションキーがWezTerm側に吸われて、まともに変換できません。

以下のように設定することで対応できます。

config.macos_forward_to_ime_modifier_mask = 'SHIFT|CTRL'

参考: macos_forward_to_ime_modifier_mask - Wez's Terminal Emulator

ちなみにWezTermの日本語入力について調べるとよく、config.use_imeの話が出てきますが、この設定はだいぶ前にデフォルトでオンになったようで、今は気にする必要はなさそうです。

その他Macでのキーボード入力を調整する

Macでは、IMEでのCtrl問題以外にもいろいろなキーがうまく働かないようです。私は以下
の3設定で回避しています。

config.keys = {
  -- Ctrl+Qが効かない
  { mods = 'CTRL', key = 'q', action = wezterm.action.SendString('\x11') },
  -- Ctrl+/はCtrl+_にしたい
  { mods = 'CTRL', key = '/', action = wezterm.action.SendString('\x1f') },
  -- \で¥が出るだけでなく、VimのLeaderで\を使いたいような場合も効かない
  { key = '¥', action = wezterm.action.SendString('\\') },
}

参考:
CTRL-Q needs to be pressed twice to register in macOS · Issue #2630 · wezterm/wezterm
Wezterm preventing CTRL + / from entering vim · Issue #3180 · wezterm/wezterm
Unable to type backslash on mac · Issue #4051 · wezterm/wezterm

正直この辺はだいぶややこしく、回避はしてますがこの設定が正しいかは怪しいです。

MacでiTerm2のv|i同様のフォント間スペーシングの調整をする

私はWezTermではUDEV Gothic JPDOCを使っています。このフォントをMacで表示すると、横が詰まって見えるので、iTerm2ではフォント設定のv|iみたいに書いてある個所(あれなんて意味でしょうね……?)を100から101にすることで調整していました。

これと同等のことをWezTermで行うには、config.cell_widthを設定します。

config.cell_width = 1.1 -- これでiTerm2でのv|i = 101と同等

config.fontstretchを指定してフォントを設定することでも同様のことができるようですが、私の環境では動作しませんでした。フォントに依存するのかもしれません。

参考:
cell_width - Wez's Terminal Emulator
wezterm.font - Wez's Terminal Emulator

この記事のライセンス

クリエイティブ・コモンズ表示4.0国際ライセンス
この文書はCC BY(クリエイティブ・コモンズ表示4.0国際ライセンス)で公開します。

GitHubで編集を提案

Discussion

ログインするとコメントできます