Linux `Vimdiff` Command – How to Compare Two Files in the Command Line
Tags: linux, bash, tutorial, learning
Published: 2023-06-18 10:29:32

Software development and maintenance can get complicated sometimes. And you might find yourself comparing code or configuration changes.

When you compare them manually, you might make a mistake, and it's easy to miss minute changes. Apart from that, finding changes in large files can be exhausting.

There are many online tools and text editors that help you efficiently compare files. But there is an easier, hassle-free method to compare files using the Linux command line.

The Linux command line is very powerful and provides a file comparison utility within  `vim`  to differentiate files side by side.

Learning file comparison in the command line is helpful because many servers use only a CLI (Command Line Interface). This means that you don't have the luxury of a GUI where you can run the browser or other text editors.

## What is vimdiff?

`Vimdiff`  is a Linux command that can edit two, three, or four versions of a file with  `Vim`  and show their differences.

### `Vimdiff`  syntax

For comparing two files, the syntax is the following:

```bash
 vimdiff [options] file1 file2
```

Let's compare two files  `index.js`  and  `index.js.bkp`  to see their differences.

```bash
vimdiff index.js index.js.bkp 
```

**Output:**

![image-13](https://www.freecodecamp.org/news/content/images/2022/08/image-13.png)



Here we can see the difference in the highlighted line.

To make things easier, we can show the line number as well. When you are in  `Vim`, go to the extended command mode by pressing escape twice and typing  `:set number`. This will reveal the line numbers for the current session.

![image-14](https://www.freecodecamp.org/news/content/images/2022/08/image-14.png)


Let's have a closer look at the output again:

![image-16](https://www.freecodecamp.org/news/content/images/2022/08/image-16.png)



-   **Uncollapsed lines:** These are the lines of codes that have not been changed. these are wrapped and can be uncollapsed using a combination of the  `z+c`  and  `z+o`  keys.
-   **Highlighted changes:** These are the differences present in a file.
-   **Line numbers:**  These are the corresponding line numbers in files.
-   **File names:**  The file name on the left is the first filename mentioned in the command. The file name on the right is the second filename provided in the command.

There is also a way to enable line numbers in Vim by default so you don't have to set it manually each time.

### How to show line numbers by default in Vim on Linux

If you like to view line numbers by default in  `Vim`, you can follow these steps:

1.  Locate the  `vimrc`  file.

`Vim`  configurations are present in the  `vimrc`  file. The file location might vary from one Linux distribution to the other. In Ubuntu, the  `vimrc`  file is located in  `/usr/share/vim/`.

2. Edit the  `vimrc`  file.

Simply append  `set number`  in the file and save and exit.

Now whenever you open  `Vim`, the line numbers will be there by default.

## `Vimdiff`  Operations

Let's see how we can utilize the powers of  `vimdiff`.

First, make sure you are in the command mode.

You can go into the command mode by pressing the  `escape`  key twice.

### How to split screens horizontally

By default,  `vimdiff`  splits the screen vertically. If you like to see the files split horizontally, you can use the flag  `-o`  like this:

```bash
vimdiff -o index.js index.js.bkp
```

**Output:**

![image-17](https://www.freecodecamp.org/news/content/images/2022/08/image-17.png)


### How to navigate in diff window

-   Navigate between diff windows

To navigate between panes, use a key combination of  `Ctrl+W+W`. The cursor will switch between the files once you press the keys.

-   Jump to changes

Instead of scrolling down line by line and scanning for the changes, you can jump to the change with a specific key combination.

1.  To move to the previous change use:  `[ + c`.
2.  To move to the previous change use:  `] + c`

### How to apply changes from diff window

-   To apply changes from the left file to the right file:

To apply the changes from the left file to the right file, first, move to the highlighted change. Then, use the command:

`:diffput`

Remember that you'll need to be in the command mode.

Using  `diffput`  to apply changes from left to right:

![image-18](https://www.freecodecamp.org/news/content/images/2022/08/image-18.png)


-   To apply changes from the right file to the left file:

To apply the changes from the right file to the left file, first, move to the highlighted change. Then, use the command:

`:diffget`

Using  `diffget`  to apply changes from right to left:

![image-19](https://www.freecodecamp.org/news/content/images/2022/08/image-19.png)


### How to undo changes

If you make a mistake, you can undo the changes provided you didn't save the file.

When you are in the command mode press  `u`  to undo the last change.

If you've recently undone a change, you won't be able to see the highlighted changes as before. You'll need to refresh to see the changes once again. You can do this by using the command:

`:diffupdate`

### How to open and close folds

The unchanged lines are wrapped to provide better readability.

![image-33](https://www.freecodecamp.org/news/content/images/2022/08/image-33.png)

To view the uncollapsed lines as shown above, move the cursor there and use the following key combinations:

-   To open the folds:  `z + o`.
-   To close the folds:  `z + c`.

### How to exit the diff window

There are many ways to exit the diff window depending on the end result.

-   `:qa`  to exit all the files without saving.
-   `:q`  to exit the files one by one without saving.
-   `:wq!`  to save and exit files one by one.


## Wrapping up

Comparing files is easy and fast with  `vimdiff`  as we compare files within the command line. In this tutorial, you learned how to use the  `vimdiff`  command to efficiently find differences in code or configuration files.

I hope you found this tutorial helpful. Thank you for reading till the end.

What’s your favorite thing you learned from this tutorial? Let me know on  [Twitter](https://twitter.com/hira_zaira)!

I would love to connect with you on any of these  [platforms](https://zaira_.bio.link/).

[![Image description](https://res.cloudinary.com/practicaldev/image/fetch/s--lTK5eo7c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cfwvazd9y2xuvmdl1746.png)](https://bmc.link/zairah)


Image credits:  
Programming vector created by storyset - www.freepik.com