🐚

Toggletermでエイリアスコマンドを実行するためには

に公開

結論

toggleterm.nvimでaliasにより作成されたコマンドを実行する場合、例えばzshの場合、.zshrcではなく .zshenv にaliasを定義する必要がある。

なぜなのか

toggletermで実行されるコマンドが対話モードで起動されないからです。 これはtoggletermやNeovim/Vimの仕様というよりかは各シェルの仕様に起因しています。

シェルには対話モードというのがあります。対話モードは普通に端末で使う場合と同じようにシェルが起動してそのうえでユーザーがコマンドを入力して操作するような形態です。一方、端末からではなく例えばvimのようなプログラムから直接コマンドを実行する場合、たとえシェルの上で実行されても対話モードにはなりません。

そして、.bashrc,.zshrcといったファイルはいずれにしても対話モードの場合のみ読み込まれます。
例えばzshellの公式ドキュメント以下のような記述があります。

Commands are first read from /etc/zshenv; this cannot be overridden.
(中略)
Then, if the shell is interactive, commands are read from /etc/zshrc and then $ZDOTDIR/.zshrc.

逆に言えば、対話モードではない限り、.zshrcは読み込まれないということです。

なお、Bashに関して言えば$BASH_ENVに変数が設定されていない限り、そもそもユーザー定義のファイルは読み込まれないようです。
https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

参考文献

https://stackoverflow.com/questions/11415428/terminal-vim-not-loading-zshrc

Discussion