GNU screenを使っていて縦分割して使っている時、 たまに表示がバグって隣の領域にはみ出したりしてしまって そのたびに領域の切り直し、みたいなことをやったり してたんですが、取り敢えず治す方法について。
screenでの表示がバグる
screenを立ち上げて、縦分割にした状態で、片側で何らかを表示した時に、 こんな感じで反対側の領域に攻め込んで行くことがありました。
右側の領域では、man bash
してますが、Vimでマニュアルを読み込んでます。
この際に、マニュアルには`
等を使った特殊表示があるので、
それが上手く処理できずにおかしな表示になってるんだと思います。
これが起こるのはLinux端末にMac等から接続している時でした。 Mac内では起こりません。
Vimには
set ambiwidth=double
というオプションがあるのですが 1 、 これを使っても変化なし。
さらに、VimだけならなんとかVimの設定でする方法があるかもしれませんが、 C++のコードをコンパイルする時等も、表示に強調等の特殊文字が使われてるので(?) エラーがあるときなど物凄い勢いでずれて行ってしまいます。
Vim内部ならともかく、標準(エラー)出力なんでもうどうしようもないかな、 と思ってたんですが、結局ターミナルの設定でなんとかなりました。
iTerm2
MacでiTerm2を使ってる場合は、Profileの中の
Text
で、
Double-Width Characters: Treat ambiguous-width characters as double width
のチェックを外します
2。
どうも上のエラー出力などでの特殊表示部分を無理やり2バイト文字として 表示しようとしておかしくなっていた模様。 なので、これを外してあげると問題なくなります。
PuTTY
WindowsでPuTTYを使ってる場合は
Window
Translation
にあるTreat CJK ambiguous characters as wide
のチェックを外します。
これもiTerm2の場合と同じ様なオプションです。
Cygwin+Mintty
Cygwinで使うMinttyに関してはこのオプションはありません。 なので、通常使ってると上の様な問題は起こりません。
Gnome-Terminal
普段はLinux端末で直接作業することはないんですが、 gnome等を使っていてgnome-terminalを使ってる場合にも似たようなオプションがあるみたいです。
Bug #191250 “gnome-terminal上で、”○”など一部の全角文字が重なって表示される” : Bugs : Ubuntu Japanese Kaizen Project
/etc/profile.d/VTE_CJK_WIDTH.sh
を作って
export VTE_CJK_WIDTH=auto
とかいておくと恐らく上のiTerm2等のオプション等に近い状態になるのだと思います。 デフォルトではオフの様です。
これらオプションを外す弊害
これらのオプションは使いはじめるときに、日本語使うこともあるだろうし、 なんとなしに有効にしておいた方が綺麗に見れるんだろう、ということで有効にしていた (と思う)んですが、 実際に、このオプションを有効にしておいた方がちょっとだけ きちんと見れる場合があります。
下ではiTerm2上での3点リーダー(…
)を表示したもの(IMEで点
等から変換したもの)
をそれぞれの場合で載せていますが、
下の場合も3点リーダーは全角であるべきものです。
Double-Width Characters: Treat ambiguous-width characters as double width
オン
Double-Width Characters: Treat ambiguous-width characters as double width
オフ
下の場合に横移動すると、1キーで3の右側まで来てしまいます。 ただ、そこに文字を打ち込むと右側に再び3が現れる様なおかしな状態に。
オプションをオンにして、screenを立ち上げない状態や、 立ち上げてもたて分割しない状態だときちんと全角文字として扱ってくれて バグったりはしません。
ただ、このオプションオンオフに関係なく、
screen+縦分割、の状態で開くとその周辺をカーソル移動させるとバグります。
Vimでのambiwidth
オプションを変えてみたりしても駄目。
逆に、オプションオンのままでlessなんかでこの3点リーダーがあるファイル (上の様な短いファイルだと大丈夫でしたが、もっと長いファイルの場合)を見て見ると、 上のGifみたいな状況が起こります。 この場合も縦分割してない状態だと特に問題ありません。
なので、基本、screenを立ち上げて縦分割してると起こる現象のようです。
まとめ
ということで、
-
screenで縦分割をするときには
Treat ambiguous-width characters as double width
的なオプションは使わない(iTerm2やPuTTY等、比較的新しいものだと同じようなオプションがある)。 -
逆に1ターミナル1画面でしか使わない様な場合、特に日本語を使う場合はオプションをオンにしたほうが良い。
ということで。
ちなみに、ちょっとtmuxでも試してみましたが、やはり上記オプションをオンにして 縦分割した状態で、3点リーダー含んだファイル(ちょっと)をlessなんかしてみると 反対側の領域に侵入(真ん中の仕切り線がおかしくなる)。 tmuxの方はなんだか行儀よく、端だけ表示がおかしくなったりしてましたが、 いずれにしろ、表示はおかしくなります。
なので、screenにしろtmuxにしろ、ターミナル内でソフト的に 縦分割をして使う場合には結構難しい問題なのかもしれません。
-
Vimで全角記号が変になる - ぐらさん家のガラクタ倉庫[れぶろぐ - [Vim] 香り屋版 Vim の ambiwidth=auto の設定について: http://www.revulo.com/blog/20090409.html↩ -
MacOSXのターミナルとiTerm2と四角記号全角半角問題 ozumaの日記 スラッシュドット・ジャパン
Issue 516 - iterm2 - Treat ambiguous-width characters as double width broken - Development site for iTerm2 - Google Project Hosting ↩