比較を開始する
F4 を押し、同じファイルダイアログで 2 回選びます。
- F4 を押します。1 行目が「左ファイルを選択」になり、操作はファイルを開くときと同じです(2.1.2 参照)。
- 左側のファイルを選びます。「左を選択済み:/etc/nginx/nginx.conf;右ファイルを選択してください」と出て、1 行目が「右ファイルを選択」に変わります。
- 右側のファイルを選びます。比較画面に入り、「比較完了:差分ブロック 7 件」と表示されます。
比較に入るとき、Erya は両方のファイルを一時ディレクトリにコピーし、以後のコピー操作はすべてその一時ファイルに書かれます。元のファイルが変わるのは、あなたが確認したときだけです(3.4.7 参照)。心置きなくコピーしてください。やめたくなったら Esc で破棄できます。
- 大容量ファイル(64 MiB 以上):「ファイル全体の読み込みによるメモリー不足を避けるため、大容量ファイルの読み取り専用モードでは左右比較を利用できません」。
- バイナリファイル:「バイナリファイルは左右2ペイン比較に対応していません」。
どちらも選択の段階で断られるので、比較画面には入りません。
画面の読み方
左右半分ずつ、間に 1 本の線。両側に行番号欄があります。
| 画面の要素 | 内容 |
|---|---|
| 2 行目(ヒント行) | 左右のファイル名が半分ずつ入り、区切り線は下の内容とそろいます。 |
| 行番号欄 | 片側 4 桁の行番号に続き、マーク欄が 2 つ:差分の種類とカーソル。 |
| 空行 | 片側に対応する行が無いところです。これが「整列」の効果で、同じ行が向かい合います。 |
| ステータス行 | 何行目/全何行、何件目の差分/全何件、横位置、そして凡例。 |
| メッセージ行 | 比較用の操作説明が常駐し、操作するとその結果に入れ替わります。 |
3 種類の差分マーク
色だけに頼らずに済むよう、種類ごとに記号があります。
| 記号 | 意味 | 画面での見え方 |
|---|---|---|
| ≠ | 両側にあるが内容が違う | 両側に付き、行内で違う文字はさらに強い色で示されます |
| - | 左だけにある | 左に付き、右は空行 |
| + | 右だけにある | 右に付き、左は空行 |
| (空白) | 同一 | マーク無し |
差分とは別に、位置を示すマークが 2 つあります:
- ▶ はカーソルで、左右同時に出ます。両側のカーソルは連動しています。
- 明るくなった行がカーソルのある行です。
- 行番号が黄色なのが「現在の差分ブロック」で、N/P が止まる場所です。
ステータス行の「現在の差分 2/7」の 7 はブロック数で、行数ではありません。連続して変わった 5 行は 1 ブロックで、N はブロックごと飛び、コピーもブロック単位です。
カーソルと現在の差分は別物
この画面でいちばん混同しやすいところです。
カーソル(▶)
↑ ↓、PageUp PageDown、Home End で1 行ずつ動き、同じ内容の行にも止まります。
差分のコピーはカーソルのある行を見ます。
現在の差分(黄色い行番号)
N/P でブロック単位に飛び、差分のある場所にだけ止まります。
飛ぶときにカーソルも一緒に動くので、そのままコピーできます。
Shift+→ を押しても何も起きず「カーソル位置にコピーできる差分ブロックがありません」と出るのはこのためです。先に N で差分へ移動してください。
移動とスクロール
左右は常に同期して動きます。
| キー | 動作 |
|---|---|
| ↑ ↓ | カーソルを 1 行、画面も追随 |
| PageUp PageDown | 1 ページずつ |
| Home End | 比較結果の先頭/末尾へ |
| ← → | 左右を同期して横スクロール。長い行を見るときに |
| Ctrl+← Ctrl+→ | 横方向に 8 桁ずつ |
| N | 次の差分ブロック |
| P | 前の差分ブロック |
N/P は最後まで行くと先頭へ戻るので、押し続ければ全体を一周できます。
差分を反対側へコピーする
キーは 2 つ。矢印の向きがそのまま方向です。
| キー | 動作 |
|---|---|
| Shift+→ | カーソル位置のブロックを左から右へ(右の一時ファイルへ) |
| Shift+← | カーソル位置のブロックを右から左へ |
- コピー後:「現在の差分を左から右の一時ファイルへコピーしました。残り 6 ブロック」——残り件数まで教えてくれます。
- コピー後もカーソルと画面位置は動きません。結果を確認できます。次へ行くときは N を押してください。
- ブロック全体がコピーされます。1 行ずつではありません。
- 一時ファイルへの書き込みに失敗すると(ディスク不足、権限など)「一時ファイルを更新できませんでした:…」と出ます。
N で差分へ→内容を見る→取り込むなら Shift+→ か Shift+←、取り込まないならまた N→一周したら Ctrl+S で適用。使うキーは 4 つだけです。
元のファイルへ適用する
プロファイルの保存キー(既定は Ctrl+S)を押し、Y か N で答えます。
- Ctrl+S を押します。まだ何もコピーしていなければ「適用する一時変更はありません」と出るだけで、確認は出ません。
- Y で確定します。Erya はまず元のファイルが外部で変更されていないか確認し、問題が無ければ書き込みます。
- 成功。「確認後、元のファイル 2 件を上書きしました」——実際に変更した側だけが書かれます。
- 失敗。「元のファイルは上書きされませんでした:…」と出て、どちらも変更されません。多くは比較中に原本が動かされた場合です。
- N でキャンセル。「上書きをキャンセルしました。一時変更は保持されています」——作業内容は残るので、続きも後からの適用もできます。
通常の保存と同じ仕組みです(2.1.7 参照)。比較には時間がかかり、その途中で git checkout により原本が入れ替わることは珍しくありません。Erya はそれを黙って上書きしません。
終了時の 3 つの選択
未適用の変更があると、Esc は先に尋ねます。
| キー | 結果 |
|---|---|
| Y | 元のファイルを上書きして終了します(同じ外部確認が入ります)。 |
| N | 一時変更を破棄して終了します。コピーした内容は無効になり、元のファイルはそのままです。 |
| Esc | 比較画面に戻り、何もしません。 |
一時変更が 1 つも無ければ、Esc は何も尋ねずに終了します。
一時ディレクトリは比較のあいだだけ存在します。N で終了したあと、コピー内容は取り戻せません。ただし元のファイルは残っているので、やり直しても失うのは時間だけです。
よくあるつまずき
比較画面での 7 つの場面。
| 症状 | 原因と対処 |
|---|---|
| Shift+→ が効かない | カーソルが同じ内容の行にあります。先に N を(3.4.4)。 |
| ファイル選択の段階で断られる | 大容量ファイルかバイナリを選んでいます(3.4.1)。 |
| コピーしたのに原本が変わらない | 変更先は一時コピーです。Ctrl+S のあと Y で確定します(3.4.7)。 |
| 「元のファイルは上書きされませんでした」 | 比較中に原本が外部で変わりました。いったん終了してやり直します(3.4.7)。 |
| 終了後に作業内容が消えた | 終了時に N(破棄して終了)を押しています(3.4.8)。 |
| 長い行の後半が見えない | ← → で横スクロールします。左右は同期します(3.4.5)。 |
| 差分の件数が思ったより少ない | 数えているのはブロックで、連続した変更は 1 件です(3.4.3)。 |