VSCode + Git で色々調べた結果、VSCode で SHIFT_JIS を扱うには、自動的に SHIFT_JIS 判別して、他にも VSCode の git.js の buffer() に textconv を設定したりとかありました。それはそれで間違いではないと思いますし、欧米語に比べて日本語の扱いづらさ (UTF-8 に至るまでに SHIFT_JIS やら JIS やら EUC やら過去の経緯で色々な文字コードが存在して、未だに後方互換を優先する Windows みたいな処理系があるとか) で、文字コードを設定するにしても色々な思想があるのだなと思う今日この頃。
色々試してみて、日本語の文字列が短すぎると VSCode の文字コード自動判定が失敗するので、やっぱり文字コード固定指定が良いのだなと思いました。
VSCode は基本 UTF-8 で運用しておいて、SHIFT_JIS 指定が必要な VBScript とか VBA のプロジェクトのフォルダの .vscode/settings.json に以下の指定を追加します。
settings.json は、「ファイル」→「基本設定」→「設定」→「ワークスペースの設定」で編集可能です。
{
"files.encoding": "shiftjis",
"files.eol": "\r\n"
}
ここでは、ファイルエンコーディングは SHIFT_JIS 決め打ちで、改行コードは CRLF にしています。
このときの ~/.gitconfig とプロジェクトの .git/config、.gitattributes は以下のような感じです。
改行コードの変換ができていないので git diff に -w を付けても ^M とか表示されてしまうのはご愛嬌で。恐らく iconv から nkf にして改行コードも変換するようにすれば何とかなるかと思いますが、Git for Windows には nkf は入っていないし、実害がないので我慢することにしました。
# git diff, git show 時に文字コード変換
[diff "cp932"]
textconv = iconv -f cp932 -t utf-8
プロジェクト以下の Git の設定。
git config core.autocrlf ture で追加。
[core]
# 他にも色々な自動で入った設定
autocrlf = true
# Text
* text=auto
# Diff
* diff=cp932
diff の実行結果で、cp932 が一番しっくり来たのでこれかな。
2022年10月4日追記
特定の言語のみSHIFT_JISで扱う場合にはこんな設定ができる。
ただ、書いては見たが files.eol
の設定は効いていないようだ。
// バッチファイル
"[bat]": {
"files.encoding": "shiftjis",
"files.eol": "\r\n"
},
// Visual Basic
"[vb]": {
"files.encoding": "shiftjis"
"files.eol": "\r\n"
},