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

ATOM でファイルを開いたら自動文字コード判定を行う

More than 3 years have passed since last update.

ATOM でファイルを開いたら自動文字コード判定を行う

はじめに

encoding-selector パッケージで文字コード判定ができるが、
わざわざcntl+shift+uを押して判定させるのは面倒。
ということで、ファイルを開いたら自動的に文字コード判定を行わせることにしてみた。
なお、環境はWindows7。

設定環境

ATOMインストールフォルダが、
C:¥Users¥HOGEHOGE¥AppData¥Local¥atom¥app-0.187.0

ATOM設定フォルダが、
C:¥Users¥HOGEHOGE¥.atom

パッケージの参照設定

  • 管理者権限でコマンドプロンプトを開く
  • node_modulesフォルダを作成
    mkdir C:¥Users¥HOGEHOGE¥.atom¥node_modules
  • iconv-liteのシンボリックリンクを作成
    mklink C:¥Users¥HOGEHOGE¥.atom¥node_modules¥iconv-lite C:¥Users¥HOGEHOGE¥AppData¥Local¥atom¥app-0.187.0¥resources¥app¥node_modules¥iconv-lite
  • jschardetのシンボリックリンクを作成
    mklink C:¥Users¥HOGEHOGE¥.atom¥node_modules¥jschardet C:¥Users¥HOGEHOGE¥AppData¥Local¥atom¥app-0.187.0¥resources¥app¥node_modules¥encoding-selector¥node_modules¥jschardet

ATOM ver.0.187.0のフォルダを指定しているので、バージョンアップには対応できてない。。なんかうまく参照する方法はないのかな?
もしくは、npmでiconv-liteとjschardetをインストールだけでもよいとのこと

init.coffeeの修正

  • init.coffee を編集するには、ATOMのFileメニューから[Open Your Init Script]を選択
  • 次のコードを追加
fs = require('fs')

atom.workspace.onDidOpen ->
  editor = atom.workspace.getActiveTextEditor()

  try
    filePath = editor.getPath()
  catch error
    return
  return unless fs.existsSync(filePath)

  jschardet = require 'jschardet'
  iconv = require 'iconv-lite'
  fs.readFile filePath, (error, buffer) =>
    return if error?
    {encoding} = jschardet.detect(buffer) ? {}
    encoding = 'utf8' if encoding is 'ascii'
    return unless iconv.encodingExists(encoding)

    encoding = encoding.toLowerCase().replace(/[^0-9a-z]|:\d{4}$/g, '')
    editor.setEncoding(encoding)

コードは、encoding-selectorパッケージのencoding-selector-list-view.coffeeのdetectEncodingメソッドを参考。

ATOMの再起動

  • ctrl+Alt+r

効能

これで、とりあえずはShiftJISとUTF-8の混在するWindows環境でもイラッとせずに済みそう。

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
ユーザーは見つかりませんでした