質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.78%

ターミナルを文字化けさせずに英語化したい(英語化するとVimで文字化けする)

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 494
退会済みユーザー

退会済みユーザー

概要

ターミナルやVimのモード表示を英語化したいのですが、英語化したらVimで編集したファイルが文字化けするようになってしまいました。

日本語に戻すと文字化けは直るのですが、できれば英語化しつつ文字化けを解消したいのでその方法があれば教えていただければと思います。

詳細

プログラミング初学者です。

ターミナル.app(bash)とターミナル版のVimを使って学習を進めています。

先日「ターミナルメッセージとかを英語にした方が学習の伸びが良さそうだな」「Vimのモード表示英語だったらかっこいいな」と思い、bashrcに以下のコードを追記しました。

# ~/private/etc/bashrc
export LANG=en_US

すると、日本語が含まれたファイルをVimで編集した時・保存した時に文字化けするようになってしまいました。具体的には下記のような感じです(この時点では.vimrcにはエンコード関連の設定は何も記述していません)。

$ vim sample.rb(新規作成)
# ~/sample.rb 新規作成(保存前)時点
# :set enc? => encoding=latin-1
# :set fenc? => fileencoding= (空白)
p "hello"
p "?~A~S?~B~S?~A??~A??~A?" ← こんにちは と打って確定するとこう表示される
# :wq
$ ruby sample.rb
=> "hello"
=> "\u3053\u3093\u306B\u3061\u306F"

$ vim sample.rb (もう一回開いてみる)
# ~/sample.rb 保存後、もう一回開いてみたところ
# :set enc? => encoding=latin-1
# :set fenc? => fileencofing= (空白)
p "hello"
p "~A~S?~B~S?~A??~A??~A?"

試したこと① export LANG=en_USの削除

bashrcに記述した英語化コードを削除して読み込み直したところ、文字化けは解消されました。

とりあえずそれでもいいのですが、可能であれば英語化しつつ文字化けを無くしたいです。

試したこと② .vimrcにエンコード関連設定を記述

やっぱり英語化したいなあと思ったので、bashrcに英語化コードを記述して文字化けしてる状態で.vimrcにエンコード関連の設定を記述してみました(参考ページ)。

"  ~/.vimrcのエンコード関連部分
set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac

すると、エンコード設定をする前とは違う挙動になったものの、文字化け自体は直りません。文字コード設定の順番などがおかしいのでしょうか?具体的には、以下のような感じになります。

$ vim sample.rb(新規作成)
# ~/sample.rb 新規作成(保存前)時点
# :set enc? => encoding=utf-8
# :set fenc? => fileencoding= (空白)
p "hello"
p "こんにちは" ← 日本語を打てるようにはなった
# :wq
$ ruby sample.rb
=> "hello"
=> "\u3053\u3093\u306B\u3061\u306F" ← 保存して実行してみるとエンコード設定記述前と同じく文字化けする

$ vim sample.rb (もう一回開いてみる)
# ~/sample.rb 保存後、もう一回開いてみたところ
# :set enc? => encoding=utf-8
# :set fenc? => fileencofing=sjis
p "hello"
p "縺薙s縺ォ縺。縺ッ" ← ここの表示が変わった

質問まとめ

  • 英語化設定しつつ、文字化けを解消できる方法はありますか?
  • 英語化設定すると他にも何か致命的な不都合(?)があったりするのでしょうか?(日本語にしておいたほうが何かといいのでしょうか?英語の勉強になるかなと思って英語にしようと思ったのですが)

素人すぎて、まだ質問の仕方等もわかっておらずすみません。「こういう情報提示くれないと解決できないよ!」等ご指摘いただければすぐ対応しますので、何卒よろしくお願いいたします。

環境

  • macOS Mojave 10.14.6
  • terminal.app
  • bash 3.2.57
  • vim 8.1 macOS version
  • rbenv 1.1.2
  • ruby 2.6.3

現状の /private/etc/bashrc(全文)

# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
   return
fi

PS1="\n\[\033[36m\]\t \w\n$ \[\033[0m\]"

export LANG=en_US

# Make bash check its window size after a process completes
shopt -s checkwinsize

[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"

現状の~/.vimrc(エンコード設定)

set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

Linuxだと再現しません。set encoding=utf-8しておけば十分。

p "こんにちは" ← 日本語を打てるようにはなった
:wq

の状態で、
cat sample.rbだとどう表示されますか?

:set fenc? => fileencofing=sjis

になっているのは、

set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8

で、sjisのほうがutf-8より前にあるからです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/24 21:07

    ありがとうございます!
    .vimrcに `set encoding=utf-8` だけ書いた状態で sample.rb を新しく作成するところからやってみました。

    > p "こんにちは" ← 日本語を打てるようにはなった
    > :wq
    のあと、 `cat sample.rb` すると

    ```
    $ cat sample.rb
    p "hello"
    p "こんにちは"
    ```

    と問題なく表示されました。そのまま `$ vim sample.rb` でもう一度開いてみても文字化けなく表示されていますが、 rubyで実行すると文字化けします。

    ```
    $ ruby sample.rb
    "hello"
    "\u3053\u3093\u306B\u3061\u306F"
    ```

    キャンセル

  • 2019/09/24 21:17 編集

    localeがen_USだけなので、RubyのEncoding.default_externalがISO-8859-1になってしまいます。
    Encoding.default_external を utf-8 にするために、
    案1:LANG=en_US.utf-8 にする
    案2:ruby -Eutf-8 sample.rb で実行する
    案3:export RUBYOPT=-Eutf-8 しておく
    案4:ソースの1行目に、#! rubyのフルパス -Eutf-8 を書く
    案5:ソースで、p の実行前に、Encoding.default_external = "utf-8" を実行する

    キャンセル

  • 2019/09/24 21:33

    ありがとうございます。
    案1をしてみたら、無事rubyが文字化けなく実行できました!

    そのほかのものについても試したり調べておきたいと思います。これでまた学習を進められます。ありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る