..

neovim比较与合并文件

分类:Linuxvim

标签:#Linux#vim

Neovim内置了方便好用的diff模式,让我们能够双手不离开键盘快速完成文件的比对和合并。

本文整理了使用Neovim比较和合并两个文件的一些操作方法。

启动 Diff 模式

从终端直接启动

在shell中,最直接的方式是使用 -d 参数或直接调用 nvimdiff

nvim -d file1 file2
# 或者
nvimdiff file1 file2

默认情况下,Nvim 会开启左右垂直分屏,左侧为 file1,右侧为 file2。内容相同的行会被自动折叠,存在差异的行会被高亮显示。

在Nvim内部启动

如果你已经用Nvim打开了 file1,可以直接使用命令水平或垂直分屏打开另一个文件进行比较:

  • 垂直分屏对比: :vert diffsplit file2
  • 水平分屏对比: :diffsplit file2

如果当前有两个普通的切分窗口,想将它们转为对比模式,只需在两个窗口分别执行 :diffthis 即可。

差异导航 (Navigation)

进入Diff模式后,最常用的操作是在不同的“差异块(Hunk)”之间跳转:

  • ]c:跳到下一个差异点 (Next change)
  • [c:跳到上一个差异点 (Previous change)

合并冲突 (Merge)

定位到差异点后,你需要决定是保留当前窗口的更改,还是拉取另一个窗口的更改。Nvim提供了两个极其简练的快捷键:

  • do (Diff Obtain):拉取。将另一个窗口中的差异内容复制并覆盖到当前光标所在的窗口。
  • dp (Diff Put):推送。将当前光标所在窗口的差异内容复制并覆盖到另一个窗口。

视图控制与刷新

刷新差异高亮

有时候你在Diff模式下手动插入或删除了某些代码,Nvim的高亮色块可能会短暂失效或不同步。此时只需强制刷新即可::diffupdate 或直接:diffu

代码折叠控制

为了让我们更方便地对比有差异的部分,相同的内容默认被折叠(Folded)。你可以使用快捷键进行控制:

  • zo:打开光标所在的折叠 (Open fold)
  • zc:关闭光标所在的折叠 (Close fold)
  • zR:打开当前文件中的所有折叠
  • zM:关闭当前文件中的所有折叠

调整分屏布局

如果代码行太长,左右分屏看着吃力,你可以利用窗口管理快捷键快速切换布局:

  • <C-w> J:将当前切分窗口移到下方(变为上下水平分屏)
  • <C-w> H:将当前切分窗口移到左侧(恢复左右垂直分屏)

保存与退出

合并完成后,和普通的Nvim操作一样保存并退出:

  • :wqa :保存所有文件并退出。
  • :qa! :放弃所有更改,强制退出。

关于vim如何退出,最权威的教程为: How do I exit Vim?


掌握上述操作后,就可以使用Neovim愉快地比较和合并文件了。