VS Code のターミナルへの入力が遅いのが気になった
- 環境: Windows (WSL2)
- シェル: zsh
新しいマシンで VS Code を使っていたら、ターミナル (zsh) でやたらコマンド入力が遅くなった。
また、関連して zsh: argument list too long
がコマンド実行時に発生していた。(zsh で環境変数がとても長い場合に生じうる)
調べると、環境変数の PATH の中身がやたらと長く、4, 5 回同じ値が繰り返されている。
/home/me/.vscode-server/bin/fabdb6a30b49f79a7aba0f2ad9df9b399473380f/bin/remote-cli:/home/me/.krew/bin:/home/me/go/1.23.3/bin:/home/me/.anyenv/envs/goenv/shims:/home/me/.anyenv/bin:/home/linuxbrew/.linuxbrew/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program Files/Alacritty/:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/Tailscale/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/dotnet/:/mnt/c/Users/me/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/me/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/me/AppData/Local/Muse Hub/lib:/home/linuxbrew/.linuxbrew/opt/node@22/bin:/home/me/go/1.23.3/bin:/home/me/.anyenv/envs/goenv/shims:/home/me/.anyenv/bin:/home/linuxbrew/.linuxbrew/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program Files/Alacritty/:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/Tailscale/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/dotnet/:/mnt/c/Users/me/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/me/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/me/AppData/Local/Muse Hub/lib:/home/me/.local/share/pnpm:/home/me/go/1.23.3/bin:/home/me/.anyenv/envs/goenv/shims:/home/me/.anyenv/bin:/home/linuxbrew/.linuxbrew/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program Files/Alacritty/:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/Tailscale/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/dotnet/:/mnt/c/Users/me/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/me/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/me/AppData/Local/Muse Hub/lib:/home/linuxbrew/.linuxbrew/opt/node@22/bin:/home/me/go/1.23.3/bin:/home/me/.anyenv/envs/goenv/shims:/home/me/.anyenv/bin:/home/linuxbrew/.linuxbrew/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program Files/Alacritty/:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/Tailscale/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/dotnet/:/mnt/c/Users/me/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/me/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/me/AppData/Local/Muse Hub/lib:/home/linuxbrew/.linuxbrew/bin:/home/me/.anyenv/bin:/home/me/go/bin:/home/me/.anyenv/envs/goenv/shims:/home/me/go/1.23.3/bin:/home/linuxbrew/.linuxbrew/opt/node@22/bin:/home/me/.local/share/pnpm:/home/me/.krew/bin
PATH の内容を見てみると、繰り返しに見えるが、微妙に読み込まれる PATH が異なっている。 zsh の plugin で auto suggestion などインストールしていると、PATH に無駄な記述が多い場合、実行パスの解決に時間がかかってしまうことが疑われる。
原因が特定できたわけではないが、.zshrc の内容が何度か異なった条件で読み込まれるようだ。端末は Linux だが、Why are there duplicate paths in the terminal’s $PATH environment variable and/or why are they reversed on macOS? が参考になった。
根本的な解決策ではないものの、Terminal › Integrated: Inherit Env
を無効化することで繰り返しの読み込みを防ぐことができる。
Whether new shells should inherit their environment from VS Code, which may source a login shell to ensure $PATH and other development variables are initialized. This has no effect on Windows. 新しいシェルが VS Code から環境を引き継ぐべきかどうかを設定します。これにより、$PATH やその他の開発に必要な環境変数を初期化するために、ログインシェルを読み込む場合があります。この設定は Windows では効果がありません。
起動したターミナルの PATH は他の terminal のものとほぼ同じになった。
/home/me/.vscode-server/bin/fabdb6a30b49f79a7aba0f2ad9df9b399473380f/bin/remote-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program Files/Alacritty/:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/Tailscale/:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/dotnet/:/mnt/c/Users/me/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/me/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/me/AppData/Local/Muse Hub/lib:/home/linuxbrew/.linuxbrew/bin:/home/me/.anyenv/bin:/home/me/.anyenv/envs/goenv/shims:/home/linuxbrew/.linuxbrew/opt/node@22/bin:/home/me/.local/share/pnpm:/home/me/.krew/bin
これで zsh のコマンド補完が速くなった。