ChatGPT解决这个技术问题 Extra ChatGPT

Diff two tabs in Vim

Scenario: I have opened Vim and pasted some text. I open a second tab with :tabe and paste some other text in there.

Goal: I would like a third tab with a output equivalent to writing both texts to files and opening them with vimdiff.

The closest I can find is "diff the current buffer against a file", but not diffing two open but unsaved buffers.

what's the tabe command?
@hhafez - open a new buffer in a new tab
It's short for :tabedit, aka :tabnew.

A
Aaron Thoma

I suggest opening the second file in the same tab instead of a new one.

Here's what I usually do:

:edit file1
:diffthis
:vnew
:edit file2
:diffthis

The :vnew command splits the current view vertically so you can open the second file there. The :diffthis (or short: :difft) command is then applied to each view.


Fwiw, MacVim doesn't seem to have this by default, but I think you should be able to go to the terminal and type vimdiff file1.txt file2.txt and knock yourself out.
This is awesometastic. The edit fileN parts can be replaced with just pasting from the buffer, which lets you diff two chunks of text without pasting each into a tmp file (something that meld lets you do, but visual diff tools on the Mac are lacking in). It worked in MacVim for me out of the box.
j
joeslice

I would suggest trying :diffthis or :diffsplit


:vert diffsplit makes for a more traditional diff-view than without :vert
You can :set diffopt+=vertical to make :vert the default.
Also, to scroll two windows simultaneously: :set scrollbind in both.
Does not work if I have to tabs, like asked in the question. If I do :diffsplit I get two connected buffers.
A
A B

When you have two files opened in vertical splitt, run

:windo diffthis


use :diffoff to turn off diff mode
But how do I change from two tabs to a vertical split?
s
snap

The content of all tabs are inside the buffers. Look at the buffers:

:buffers

Find the right number for the content which should be diffed with your current tab content.

Open the buffer inside your current tab (f.e. buffer number 4)

:sb 4

Or do for vertical view:

:vertical sb 4

Then you can simple diff the content with

:windo diffthis

If you finished diff analysis you can input:

:windo diffoff