9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Git + VSCode で SHIFT_JIS を扱うには Encoding 固定の方が便利

Last updated at Posted at 2018-05-05

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 は、「ファイル」→「基本設定」→「設定」→「ワークスペースの設定」で編集可能です。

~/.config/Code/User/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 は入っていないし、実害がないので我慢することにしました。

~/.gitconfig
# git diff, git show 時に文字コード変換
[diff "cp932"]
    textconv = iconv -f cp932 -t utf-8

プロジェクト以下の Git の設定。
git config core.autocrlf ture で追加。

.git/config
[core]
    # 他にも色々な自動で入った設定
    autocrlf = true
.gitattributes
# Text
*       text=auto

# Diff
*       diff=cp932

diff の実行結果で、cp932 が一番しっくり来たのでこれかな。

2022年10月4日追記

特定の言語のみSHIFT_JISで扱う場合にはこんな設定ができる。
ただ、書いては見たが files.eol の設定は効いていないようだ。

~/.config/Code/User/settings.json
// バッチファイル
"[bat]": {
    "files.encoding": "shiftjis",
    "files.eol": "\r\n"
},
// Visual Basic
"[vb]": {
    "files.encoding": "shiftjis"
    "files.eol": "\r\n"
},
9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?