Help us understand the problem. What is going on with this article?

git bash とvim ターミナル機能における環境設定ファイルの違い

vimのターミナルで発生した文字化けが解消しなかった

私はvimを愛用しているのだが、windows環境はとかくlinux環境と違いすぎていて思い通りに利用するための考慮があちこちに必要となる。
今回ハマったのは、Windows版のgitbash上でvimを起動したときにterminal機能で発生した文字化けだ。
私は文字化け対策を環境設定ファイル.profileに施しているのだが、これがvimのターミナルでは機能しなかった。vimターミナル上でWindowsコマンドを実行するときに出力される日本語が文字化けし、解消しなかった。
色々と試行錯誤した結果、原因はgitbashとvimのターミナルでは、読み込み可能な環境設定ファイル名がことなるため、.profileファイルに設定していた文字化け対策が機能していなかったという事だった。

gitbashの環境設定ファイル

まず、gitbashで読み込み可能な環境設定ファイルは以下の3つだ。
1. .bash_profile
2. .bash_login
3. .profile

これ以外のファイルはデフォルトでは読み込まず、エラーとなる。私は元々.profileに環境設定情報を設定していたので、特に問題なくgitbashを利用していた。

vimターミナルの環境設定ファイル

私はプログラムコードを書くエディタとしてvimを愛用していた。そして、vimのターミナルを起動することでいちいち別のコマンドラインを起動することなくvim上からビルドしたりツールを実行していた。
Linux環境では正常に利用できていたこのやり方だが、Windows環境下では文字化けが問題だった。Windowsコマンドはコンソールメッセージに日本語が出力されることが多々あり、gitbash上のvimのターミナルから実行するともれなく文字化けする。
私は最近C#プログラムをdotnet core環境で開発するプロジェクトに携わっておりVSを利用している。今回gitbash環境下でvim+コマンドラインのお手軽開発環境で利用したいと思い、プログラムのビルドはvimターミナルからdotnetコマンドで実行しようと試みた。

dotnetコマンドは何の情報を見てロケールを判断しているのか不明だが、とにかく日本語がコンソールメッセージに表示される。
202001200302.png

dotnetコマンドが参照している環境変数として「DOTNET_CLI_UI_LANGUAGE」があるが、これは元々「en」に設定されており、これ以上の情報を見つけることが出来なかった。

上記イメージは正しく日本語が表示されているが、これはiconvを使用して強制的に文字コードをutf-8に変換しているためである。そうでなければgitbash上からコマンドを実行したタイミングで文字化けして使い物にならなかった。
202001200306.png
「dotnet」と入力すると「wincmd()」関数が実行され、iconvを経由してcp932をutf-8に変換している。
だが、これがvimのターミナルから実行すると正常に動作しなかった。
202001200312.png

調べていくうちに、vimのターミナルは環境変数として.bashrcというファイルを読み込むという事が分かった。試しに、.profileファイルを.bashrcファイルとしてコピーしてからvimのターミナルでコマンド実行すると、思惑通りに表示された。
202001200317.png

そうか、なら.bashrcでいいかと.profileを削除してgitbashを再起動したら、今度はgitbashが.bashrcファイルを読み込まない。以下は、.bashrcファイルを作成後にgitbashを起動したときのエラーメッセージ。
202001200239.png

ただし、この時gitbashは.bashrcファイルの存在を認識しており、何と.bashrcファイルを読み込む.bash_profileファイルを自動生成することでこの問題を自動解決していた。
そんなことせずに.bashrcを素直に読んでくれればいいだけなのだが。。

とにかく、これでgitbashでもvimのターミナルでも同じ環境設定ファイルが認識されるようになった。

これなら私好みにしたほうがよさそうだ。
.profileファイルをそのまま残し、.bashrcファイルで.profileファイルを読み込むことにした。
202001200335.png

解決!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした