Putty + Screen + Vimで日本語を表示していると、表示がずれることがあります。
具体的には以下のような文字が含まれる行を編集したりコピーペーストしたりした場合です。
×÷○□※
調べてみると、どうもScreenに問題があるようです。
ちなみに各ソフトウェアのバージョン・設定等を抜粋するとこんな感じです。
- Putty
- バージョン: 0.63-jp20130916
- リモートの文字セット: UTF-8(CJK)
- CJK用の文字幅を使用する: Off
- 端末タイプを表す文字列: xterm-256color
- リモートPC
- CentOS 6.5 (x86_64)
- $LANG: ja_JP.UTF-8
- GNU Screen
- yumでインストールした screen.x86_64 0:4.0.3-16.el6
- screen -Uで起動
- Vim
- yumでインストールしたvim-enhanced-7.2.411-1.8.el6.x86_64
- ~/.vimrcでset ambiwidth=double
特にPuttyのUTF-8(CJK)というのと、Vimのambiwidth=doubleはこう設定していないと、上記以外の文字("~"など)でも表示に影響が出るようです。
それでもズレるというので、これまでは表示がずれたらCtrl-lで再描画させて凌いでいたのですが、ふと気になって調べて対策してみました。
ズレですが、FreeBSDでは起こらなくて、CentOSでは起こるというのの気がつき、FreeBSD Portsに含まれているopt-cjkwidthというパッチが効きそうというのが分かりました。
それで、手動でパッチをあててビルドしたら解決かと思いきや、CentOS上でScreenがconfigure & makeではビルドできず、手間がかかりました。
さらに調べてみると、yumでインストールされるパッケージは、素のscreen-4.0.3にいくつかパッチが適用されてビルドされているようです。ということで、最終的には以下の手順でビルド・インストールしました。
- ScreenのSRPMパッケージをダウンロード、インストール
- opt-cjkwidthパッチをコピー
- SPECファイルを変更
- RPMパッケージを作成
- 前から入っているScreenをアンインストール
- 生成したRPMパッケージから修正版Screenをインストール
詳細な手順は以下のようになりました。
ScreenのSRPMパッケージをダウンロード、インストール
手っ取り早くwgetでダウンロードし、rpmコマンドでインストールします。
wget 'http://vault.centos.org/6.5/os/Source/SPackages/screen-4.0.3-16.el6.src.rpm'
rpm -ivh screen-4.0.3-16.el6.src.rpm
一般ユーザ権限で実行して、~/rpmbuild/にファイルが展開されます。
opt-cjkwidthパッチをコピー
FreeBSDの/usr/ports/sysutils/screen/files/opt-cjkwidthを~/rpmbuild/SOURCES/にコピーします。手元にFreeBSD PCが無くても、Web上からopt-cjkwidthパッチは取ってこれると思います。
SPECファイルを変更
~/rpmbuild/SPECS/screen.specを編集します。
opt-cjkwidthパッチを適用するように他のパッチを真似て以下2行を追加します。
Patch15: opt-cjkwidth
...
%patch15 -p0 -b .cjkwidth
他のパッチはほとんどが-p1となっていますが、opt-cjkwidthは-p0にします。
RPMパッケージを作成
rpmbuildコマンドでビルドを行いRPMパッケージを作成します。
rpmbuild -bb ~/rpmbuild/SPECS/screen.spec
必要なパッケージが足りない場合はエラーメッセージが出ますので、パッケージをインストール後に再度rpmbuildコマンドを実行します。私の場合は以下のように不足パッケージをインストールしました。
sudo yum install ncurses-devel pam-devel libutempter-devel texinfo
前から入っているScreenをアンインストール
yumでインストールしたScreenをアンインストールします。この作業が必要なのかよく分かっていませんが念のため。
sudo yum remove screen
生成したRPMパッケージから修正版Screenをインストール
以下のようにrpmコマンドで作成したRPMパッケージからScreenをインストールします。
sudo rpm -ivh ~/rpmbuild/RPMS/x86_64screen-4.0.3-16.el6.x86_64.rpmd
0 件のコメント:
コメントを投稿