開発
tmuxのセッションでZshの補完が効かなくなった話
Yoshiteru Matsuoka
みなさんはどのようなCLI環境を構築していますか?私の場合は、シェルは補完が強力であるZsh(フレームワークとしてprezto)を使っています。また、ターミナルの画面を分割したりするのにtmuxを利用しています。そんな私のCLI環境で起こったエラーの話を書きたいと思います。
はじめ
実際に私の環境上のZshの補完を見ていきます。ホームディレクトリで`cd d`
まで入力してTABを押すとこのようになります。
dから始まるディレクトリが候補として表示され、選択してenterを押せば補完できます。しかし、これが突然tmuxのセッションだけできなくなりました。
調べる
とりあえずわからないことだったのでググってみました。「zsh 補完 効かない」などでググってみると、このような記事がありました。
この記事にある解決策を実行すると、確かに補完が効くようになりました。しかし、tmuxで新しくセッションを作成してみると、新しいセッションでまた補完が効かなくなったままでした。
解決
いろいろ調べてみても有効な解決策が見つからなかったので、とりあえずターミナルを再起動してみると、このようなエラーが出てきました。
/Users/Matsuoka/.zlogin:zcompile:13: can't write zwc file: /Users/Matsuoka/.zcompdump.zwc
これは!と思って「can’t write zwc .zcompdump.zwc」でググってみると、GitHubのディスカッションが出てきました。Tmux issue: zcompile error on .zlogin line 13 #318
どうやら他のZshインスタンスが.zcompdump.zwc(実行を高速化するためのダンプされた設定ファイル)に書き込み中でロックしているため、今のセッションのZshが書き込みができないようです。
なるほどと思いながら、他に起動しているZshがないか調べ、そのZshを終了すると、新しいセッションのなかでも補完が効くようになりました。
まとめ
エラーはいろんな手法を試したり、調べたりして解決しなければいけません。自分で構築した環境ならば、なおさら自分が理解してメンテナンスすることは重要になると今回のエラーから思いました。