📚
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