読者です 読者をやめる 読者になる 読者になる

どせいたんさき。

ナスダヨー

git diff で長い行が wrap されなくて困ったときの設定

目的

git diff でながーい行を含むファイルの差分を表示したとき,ながーい行がコンソールの端っこで折り返さないで彼方に消えてしまった.変更点はながーい行の一部分だけを変更する場合もあるのでながーい行をきちんと折り返して差分を表示するようにしたい.

解決方法

基本的に git のせいではなくて core.pager で設定しているページャのせい.僕の環境の場合は less が git のページャになっているので適切なオプションを設定してあげれば良い.

検索したところこのサイトがひっかかった.いくつか解決策が提示されていたので試してみた.

less -r を使う

希望通りながーい行を折り返して表示することができた.しかし,表示の面で多少問題がある.ながーい行を内部的に一行として扱っているため,less で一行ずつ送っていくとながーい行のところで行送りがジャンプするような挙動になる.一方で,折り返されたながーい行を後ろに戻っていくと表示されている画面の位置と内部的な画面の位置にずれが生じるらしく,表示がおかしくなる.一応 -sr というオプションも試してみたけど問題は解決しなかった.

less -R を使う

自分の環境 (Ubuntu 12.10, git 1.7.10) ではこのオプションで git diff の表示が折り返されることはなかった. -SR などいくつかオプションの組み合わせを試してみたけども結局効果なし.

less -+S を使う

一体どういうオプションなのかわからなかったのだけど manpage 曰く,

  • +

コマンドラインオプション文字のうちの 1 つを続けて入力することで、オプションをデフォルト設定に戻して、新しい設定を表示する。("-+X" コマンドは、コマンドラインで "-+X" とするのと同等である。)このコマンドは文字列の値を持つオプションには使えない。

http://linuxjm.sourceforge.jp/html/GNU_less/man1/less.1.html

ということなので -S, --chop-long-lines をデフォルトに戻すという意味がある.で,実際にこのオプションで実行してみたら見事ながーい行が折り返されて表示され, -r でひっかかったような表示の問題もなかった.めでたし.