比较 Vim 中的两个文件

Zai*_*aid 82 vim diff

是否可以在 Vim 中并排查看两个文件?如果是这样,我如何设置我的编辑器来做到这一点,有没有办法diff在 Vim 中的两个文件之间?

我知道:next:prev命令,但这不是我所追求的。串联查看这两个文件真的很好。

max*_*zig 66

打开并排视图:

Ctrl+w v
Run Code Online (Sandbox Code Playgroud)

它们之间的变化:

Ctrl+w h or l
Run Code Online (Sandbox Code Playgroud)

如果需要类似 diff 的视图,请查看 vim 包中的vimdiff命令:

vimdiff file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法锁定两个窗口之间的滚动? (2认同)
  • @Zaid 使用`vimdiff file1.txt file2.txt`(见下文) (2认同)

Ale*_*ach 58

您还可以在分屏模式下打开 vim,-O选项为:-

vim -O file1 [file2 ...]
Run Code Online (Sandbox Code Playgroud)

然后要打开差异模式,您需要:diffthis在每个窗格中运行命令。

另一个用例场景是,如果您已经在 vim 中打开了一个文件,并且您想打开它并将其与另一个文件进行比较。然后你可以使用以下 vim 命令:-

:vs otherfile (open otherfile in vertical split screen)
:diffthis (turn on diff mode in original file)
Ctrl+w l  (swap to newly opened file)
:diffthis (turn on diff mode in opened file)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用 vim 命令关闭每个窗格中的差异模式:diffoff

编辑
还有另一个没有提到的标准:-

vim -d file1 [file2 ...]
Run Code Online (Sandbox Code Playgroud)

这相当于vimdiff直接调用。

  • `:windo :diffthis` 可以用来代替最后三个命令。 (17认同)

小智 16

或者只是在 VIM 中打开第一个文件,然后:vert diffsplit file2 :vert使其垂直拆分屏幕。

diffsplit 做一个差异,并拆分文件并滚动锁定它们。


Wol*_*son 7

虽然已经回答了如何启动 diff,但如何在所有窗口中停止它也很重要。为了完整起见,我重复@Bernhard 的评论。

在 2 个窗口中打开的两个文件的开始停止差异(适用于垂直和水平分割):

:windo diffthis
:windo diffoff
Run Code Online (Sandbox Code Playgroud)

这可以缩短为

:windo difft
:windo diffo
Run Code Online (Sandbox Code Playgroud)

或者

:windo difft
:diffo!
Run Code Online (Sandbox Code Playgroud)

请注意,打开显示插件内容的窗口会导致问题。之前很接近的东西,比如 NERDtree、minibufexplorer++ 等。

自定义命令: 为了简化操作,您可以将自定义命令添加到您的~/.vimrc

command! Difft [ClosePluginWindow |] windo diffthis
command! Diffo windo diffoff
Run Code Online (Sandbox Code Playgroud)

可以[ClosePluginWindow |]选择关闭您通常使用的插件窗口。对于 NERDtree 例如,这将是NERDTreeClose |.

致谢@cxw@Jordi Freixa