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

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

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

1回答

3405閲覧

Atomエディタで一部の文字が正しく折り返されません。

taro9

総合スコア7

0グッド

0クリップ

投稿2016/07/07 09:33

###前提・実現したいこと
Windows10でAtomエディタ(1.8.0)を使っている者です。
一部の文字が混ざると正しく折り返されない現象に悩んでいます。

具体的には、「○」、「■」、「△」などの全角記号が行に含まれていると折り返し位置を超えてしまいます。全角記号を半角の幅と認識しているような感じです。

また、右端で折り返す設定ではみ出した場合、スクロールバーは出るのですが、何文字かは完全に見えなくなってしまいます。

検索しても同じ様な問題は見つけられませんでした。
Windows7からWindows10にアップグレードしたことが問題なのかもしれません…。
この現象がWindows7の時にも起きていたかはわかりません。

右端で正常に折り返す方法をご教示頂ければ幸いです。

###発生している問題
以下の画像は、記号の折り返しがおかしい状況の画面です。
わかりやすくするために40文字で折り返す設定にしています。(折り返し時のインデント:6)
「あ」や「数字」は40文字で折り返されていますが、「○■△」は40文字を超えても折り返されていません。

記号の折り返しがおかしい状況

Atomの設定
Preferred Line Length : 40
Soft Wrap At Preferred Line Length: on
Soft Wrap Hanging Indent : 6

###試したこと
Atomを再インストールしても解決しませんでした。
beta版の1.9でも同様でした。
旧バージョンもいくつか試してみましたが同様でした。

AtomicCharというパッケージを使うと1回目の折り返しは正常になることがわかりました。
しかし、2回目以降の折り返しで、はみ出す可能性があり、一度はみ出すとそれ以降折り返しません。スクロールバーが出ます。
はみ出す条件は、空白を含まない半角文字の連続で折り返し位置を超える場合のようです。
全角記号も半角文字扱いになるようで、連続して折り返し位置を超えるとはみ出してしまいます。
スクロールバーが出た場合でも、完全に見えなくなる文字ははないようなのでとりあえずこれでしのいでいます。

###補足情報
Atom: 1.8.0
OS: Windows10 Pro 64bit

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

端的に言うとAtomの不具合というか、まだ対応できていない部分です。ぜひIssuesに投げてください。

内部動作の話をします。Atomは文字数を数えて指定文字数を超えたらsoft wrapを行うという処理をしています(これはAtomの内部的な処理の関係でそのような動作になっています)。しかし、文字によって半角幅(いわゆる半角文字)と全角幅(いわゆる全角文字)がありますので、現れた文字によって1個とカウントするのか2個とカウントするのかを変えています。特に問題になるのはCJK環境ですが、なるべく使用されているフォントにあわせてカウントする値を変えるように処理を行っています。

さて、ここで問題になるのは「どの文字が全角なのか?」を判定することです。この判断はsrc/text-utils.coffeeにあるisDoubleWidthCharacter()関数で行っています。この関数では、次の文字の時は全角であると判定しています。

  • 日本語の平仮名片仮名(とか) U+3000 - U+30FF
  • 漢字(とか) U+4E00 - U+9FFF
  • 全角・半角文字クラスにある全角文字(とか) U+FF01 - U+FF5E, U+FFE0 - U+FFE6

このように、上には「○」や「△」といった記号は含まれていません。なぜなら、これらの記号が全角幅であるのは日本語の一般的なフォント特有の話であり、他のフォントではそうとは限らないため、全角幅だと決め打ちできないからです。そのため、記号は半角文字であると判定されて、半分幅で計算され、soft wrapがはみ出してしまいます。

※ 同様の問題がプロポーショナルフォントにもあります。将来は対応したいらしいです。
※ AtomicCharは文字一つ一つについて幅を決め打ちせずに、実際に裏で描画して改行が必要な幅かどうかを計算しています。そのため、幅の計算が間違うことはありません。
※ ハングル文字は別に計算しています。
※ サロゲートペアなどはまた別の特殊な計算をしています。
※ 他のエディタはsoft wrapの仕方が全く異なるため、参考になりません。Atom独自の問題です。
※ 昔のバージョンでは漢字も含めてsoft warpがうまくいかず、japanese-wrapというパッケージが必要でした。japanese-wrapは日本語環境決め打ち(MSゴシックを想定)で作ったのでここら辺もうまく動くように対応していたのですが、漢字等がAtom本体で対応したことに伴い、japanese-wrapの開発は終了しました。今のところjapanese-wrapが復活する予定はありません。

投稿2016/07/07 10:21

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taro9

2016/07/07 12:49

非常に詳細かつ丁寧なご回答ありがとうございました。 Atom自体が非対応だったのですね。 検索で見つからなかったので自分の環境だけに起きている問題かと思い、ひたすらWindowsやAtomの設定をいじくり回していました。原因がわかって安心しました。 (japanese-wrapはすごいですね。使えないのが残念です) Issuesに投稿したいのはやまやまですが、自分の技量では難しいです。Atomを使っていて難ですが、GitHubは見る以外殆ど使ったことがありません。また、英語はほぼ全て翻訳に頼っているのでうまく伝えられそうにありません。残念ですが、プロポーショナルフォントの対応と一緒に修正されることを期待して待ちたいと思います。 有益な情報を教えていただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問