8. Comparing Files

File compare window is basically two files opened to editor into two horizontal panes. The editor allows user to do a basic file editing inside WinMerge without needing to open files to external editor program or development environment.

File Compare Window

WinMerge editor is not comparable to specialized editor programs, but it has basic features like Undo/Redo, Find/Replace and Goto (to linenumber). The editor also has a syntax highlighting feature supporting several file formats (colors configurable). Note however WinMerge does not syntax highlight text inside differences. Syntax highlighting can be disabled from options.

[Tip] Tip

If Automatic rescan is not enabled manual refresh is recommended after editing.

8.1. Showing the Differences

WinMerge uses different (user configurable) colors to highlight and select differences. By default WinMerge shows different lines with yellow background and missing lines with gray background. If user selects the difference, it is shown with red background and missing lines with milder red.

8.2. Tabs

WinMerge can show open windows in tab bar below toolbar. Tab bar can be shown and hidden from menu View->Tab Bar. When the tab bar is shown it has one tab for every open window. The tab contains last part of the folder names or file names.

8.3. File Headerbar

The file headerbar has several functionalities. See screenshot below:

Headerbar shows full path to the open file. If the path is longer than available space one part of the path is replaced with an ellipsis (...). Headerbar also shows:

  • the current active file with sunken border (like in the above screenshot), the non-active file is shown with flat headerbar.
  • if the file has been modified (has unsaved changes). This is indicated by adding asterisk (*) before the filename, like in the screenshot.

Headerbar has a context menu with items to copy full path or filename to clipboard.

8.4. Statusbar

Statusbar upper line shows information about current line. In first pane:

  • Ln : current linenumber
  • Col: current column for cursor and total number of columns in line
  • Ch : current char for cursor and total number of chars in line
  • EOL : current line EOL style (shown only when Preserve original EOL chars-option is enabled)
[Note] Note

Col counts TAB as X chars (as defined in editor options) and Ch counts TAB as one character.

Other three panes are:

  • read-only: RO is shown in the pane if the file is read-only / protected
  • encoding: this pane shows codepage number for ANSI files and Unicode encoding type for Unicode files
  • EOL style: EOL style can be Win for Windows/DOS files (CRLF), Unix (LF) or Mac (CR)

Note there are two different ways to show EOL style. When per-line EOL style is not remembered, EOL style is shown on own pane in statusbar. And when per-line EOL style is remembered line's EOL style is shown after char number. When per-line EOL style is used there is no file-wide EOL style.

Difference between column and char is that column counts tabulator character as so many (space) chars as it occupies (4 by default, can be changed from options). But char count counts tabulator char as one char.

Lower line in statusbar shows current difference and amount of differences. Text can be:

  • Identical : files are identical there are no differences
  • X differences Found : amount of differences, no difference is selected
  • Difference X of Y : amount of differences (Y) and number of selected difference (X)

8.5. Editor Margin

The editor panes (file panes) have optional gray margin area for line numbers and some symbols. This margin can be shown/hidded from menu View->View Margins. The margin shows:

  • Line numbers (from menu View->View Line Numbers)
  • Bookmarks (menu Edit->Bookmarks)
  • Word wrap symbols, when word wrap is enabled

When line numbers are not shown then margin is shown like screenshot below.

Blue circle is a Bookmark. And arrow marks word-wrapped line. Next screenshot shows same lines without word-wrap and with linenumbers.

If linenubmers are not visible it takes pretty minimal width. Note that with linenumbers the margin width is set so that the longest line number fits into it. So with large files with lots of lines it needs space for several numbers.

8.6. Difference Navigation

Difference navigation commands are in Merge menu:

8.6.1. Selecting a difference

Before difference can be merged, it must be selected. Selecting can happen by difference navigation keys/items (see below) or by selecting wanted difference directly:

  • Double-click over difference with mouse
  • Move cursor inside difference and select it with Current Difference.

8.6.2. Navigating differences

Merge-menu has items for navigating to next/previous and first/last difference. Navigation is always done based on current cursor location. So Next Difference-command selects next difference from cursor, not from current selected difference.

[Note] Note

When difference is selected with navigation commands cursor is moved to begin of first line of difference. In both files.

8.6.3. Current Difference-command

This command has two important functions:

  • When there is no difference selected and cursor is inside difference, it selects this difference. This is very handy way to select difference from keyboard.
  • When there is selected difference, it scrolls to selected difference. This is handy if user has scrolled selected difference out of screen. So this allows user to scroll files to see other contents and quickly return back to selected difference.

8.6.4. Go To line or difference

Using Go To from Edit-menu user can jump to certain line or difference. Go To -dialog shows current line and side when opened.

[Tip] Tip

Go To line number is useful if there is need to merge same change to several target files from one original file. Rather than using Find or difference navigation it is faster to jump to first line of difference.

8.7. Merging Differences

Merging commands are located in Merge-menu after navigation commands. Basically there are only two types of merging commands - copy difference from right to left and copy difference from left to right. Additional commands make merging several differences easier.

Copy to Right and Copy to Left copy difference from side to side. At simplest this means replacing text in destination difference with text in source difference. But because difference can contain also removed lines, new lines may be created or some lines removed. If there are several differences selected, then all fully selected differences are merged with one command. This makes merging many small differences a lot faster.

WinMerge rescans files after every merging operation. This is done to ensure differences were copied correctly and all changes after last rescanning are taken care of. If Automatic rescan-option is not set, user may have edited files and differences may not have shown correctly before merging. If result of merging is not what were wanted, user can undo merging operation.

[Important] Important

It is strongly advised to run Rescan (F5) before merging differences if Automatic rescan is set off. Usually files get out of sync when editing and merging differences may have unpredictable results. If merging result looks incorrect try undoing (Edit->Undo from menu or Ctrl-Z) it and rescanning files. And then merging again.

Copy to Right/Left and Advance-commands merge current difference and then select next difference (if there is one). Using these commands makes merging several differences easier and faster.

Copy All to Right/Left-commands sync two open files by merging all differences. Note that you can undo this whole operation with one undo command.

[Tip] Tip

Enable Automatically scroll to first difference -option from general options. This saves you from scrolling to first difference and selecting it. See Options & Configuration -chapter for more information.

8.8. Merge Mode

Merge mode can be enabled from the File-menu. It restores the WinMerge 1.7.1 single keys for difference merging and navigating:

  • Up- and Down arrow keys select previous and next difference
  • Left- and Right arrow keys merge difference to left side or right side.

Unlike the normal mode, in this schema the Alt-key is not needed for these basic operations (which makes them quicker and more convenient). Note that Shift-Arrow, Alt-Arrow and Ctrl-Alt-Arrow keys work in merge mode like in normal mode.

When merge mode is enabled Merge text is shown in statusbar.

8.9. Refreshing

Refreshing updates differences after changes are made to files. It is important to do a refresh before merging changes between files.

[Note] Note

Refresh does not reload file. That means, if another programs has updated files etc, those changes are not seen. Refresh updates differences according changes user has done.

8.10. View Whitespaces

When enabled from View menu View Whitespace feature shows all whitespace characters (spaces, tabulators, line ends). This is very useful for example when there are spaces in other file and tabulators in other. Also, if Preserve original EOL chars is enabled, WinMerge shows type of EOL (Windows/Unix/Mac).

8.11. Editing Files

Normal editing features work in WinMerge editor. User can type and delete text, select text, copy, cut and paste text etc. There is some customisation because there can be removed lines in files (lines existing only in other side). Anyway these customisations are not usually visible to users otherwise that lines can sometimes "jump" when WinMerge has to relocate matching/non-matching files.

8.12. Line Difference Highlight

WinMerge can automatically highlight all differences it finds in lines. This makes it fast to look through and find differences. See screenshot below for an example of highlighted differences.

This feature can be enabled and disabled from menu View->View Line Differences.

With default settings WinMerge uses whitespace characters (namely spaces and tabulators) to separate words. WinMerge does not consider commas or dots as word separators. That means WinMerge thinks "For Example" is two words but "For,Example" is one word. More characters can be included as word-separator characters from editor options (select from menu Edit->Options and Editor page). See Options & Configuration -chapter for more information.

8.13. Line Difference Selection

Many times it is useful to see exact differences inside lines. WinMerge can highlight different area between lines. This feature is called Select Line Difference. It is available in Edit-menu, toolbar and shortcut key (F4). In screenshot below there is one difference highlighted

8.14. Location Pane

Location pane is a handy side-pane showing a overall (difference) map of files compared.

Location Pane shows differences as they are located in the files. So it gives a good overall view for files compared. Location Pane shows differences with same colors than editor panes. There are different indicators in Location Pane:

  • small triangles point to begin of the selected difference
  • selected difference is shown with different color
  • area visible in editor panes is shown with different background color

Clicking with mouse in Location Pane moves cursor to place clicked in file. Right-clicking with mouse opens the context menu with items to select line to go to. And the visible area locator (area with different background color) can be used like a scrollbar thumb - after pressing down the left mouse button over it can be dragged upwards and downwards to scroll the files.

8.15. Context Menu

File compare context menu contains items for frequently used features:

Most of these items are familiar from Main menu. Worth noting is last item Open. It allows to open file with (system) registered application or with external editor. Also context menu merge-commands are not relative to active file. They always merge the selected difference.

8.16. Fonts

Font used by editor can be changed from View->Select Font.... Due to limitations in the editor, only fixed width fonts are supported in WinMerge.

Font suggestions for use of WinMerge with East Asian languages:

  • Simplified Chinese texts with the SimSun or SimHei fixed-width fonts
  • Traditional Chinese texts with the MingLiU fixed-width font, or
  • Japanese texts with the MS Gothic or MS Mincho fixed-width fonts
  • Korean texts with the GulimChe fixed-width font (not Gulim as this variant uses proportional-spacing glyphs that are not centered in grid cells and then poorly aligned in fixed-width mode)

8.17. Resolving Conflict Files

WinMerge can resolve conflict files several version control systems produce when merging files. Conflict file is basically two different versions of files embedded into one file. WinMerge reads this file and separates it into its original files, and shows those files in file compare. So conflicted file can be resolved using normal WinMerge file compare functionality.

8.17.1. Opening Conflict Files

Conflict files can be opened into WinMerge using File->Open Conflict File.... Conflict file to resolve can be selected using file selection dialog that opens. At the moment there are no other ways to open conflict files.

[Warning] Warning

WinMerge overwrites original conflict file. If original file is wanted to save, it must be copied to another folder or another filename before opening it into WinMerge.

8.17.2. Conflict Resolving

WinMerge opens conflict file into normal file compare (see above). All normal WinMerge file compare features are in use. Files in two panels are:

Left panel: this file is called "theirs" file. It is usually the file that is in version control system's repository. This file usually cannot be edited. An as such, WinMerge opens left-side file as read-only. Differences can be moved only from this file to the another file.
Right panel: this file is called "mine" file. It is the user's working file originally. All changes should be done to this file. I.e. this file is at the same time the result file.

After the wanted resolved file is in right-side panel, it can be saved like normal file. WinMerge saves the file over original file.

Left side "mine" file is set to modified after opening conflict file. This allows fast resolve by just saving the file when user's file is the wanted end result. This also prevents accidentally not resolving the files. As resolving only happens when file is saved. If file is no saved, original conflict file is kept unmodified.

Many version control tools allow configuring external merge tool. WinMerge accepts three filenames ("Theirs", "Mine" and "Resolved") as command line parameters. See more info from Command Line -chapter. Single path to the conflict file is also accepted in command line.