📚

PowerShell で WezTerm の keybinds.lua を UTF-8(BOM なし)で書き出す方法

に公開

結論

Windows Powershell を使っている人は

wezterm show-keys --lua | Set-Content keybinds.lua -Encoding UTF8

を使って keybinds.lua を作成してください

発生状況

この方の記事を参考に WezTerm の環境構築を Windows で進めていた時のことです
WezTerm のカスタムキー割り当ての書き出しを行おうとして、記事にある通り wezterm show-keys --lua > keybinds.lua と PowerShell に打ち込んだところ、Lua モジュール読み込みの際にエラーが発生しました

エラー内容

runtime error: searcher:8: error loading module 'keybinds' from file 'C:\Users\sk128\.config\wezterm/keybinds.lua':
  C:\Users\sk128\.config\wezterm/keybinds.lua:1: unexpected symbol near '<\255>'

原因

PowerShell のリダイレクトがデフォルトで UTF-16LE(BOM付き)になるためで、Lua 側が期待する UTF-8 と衝突してしまっていたことが原因のようです

PowerShellで > 演算子を使うと出力ファイルは UTF-16LE + BOM になり、
Lua の require()dofile() は BOM なしの UTF-8 を期待しているため、BOM 特有の判別情報が “unexpected symbol” エラーを引き起こしているようです

対処

1. PowerShell 側でエンコーディング指定

Out-File ver.

wezterm show-keys --lua | Out-File keybinds.lua -Encoding UTF8

Set-Content ver.

wezterm show-keys --lua | Set-Content keybinds.lua -Encoding UTF8

2. 既存ファイルをエンコーディング変換する

VSCode やその他エディタで keybinds.lua を開き、右下のエンコーディング表示から「UTF-8」を選んで再保存。

Discussion