Git のコンフリクトを解消するために、Neovim をmergetoolとして使いたい。
設定
gitconfigに、以下の通り設定する
[mergetool "neovimdiff"]
cmd = nvim -d $LOCAL $MERGED $REMOTE -c 'wincmd l' -c 'wincmd J'
[merge]
tool = neovimdiff
nvim -d
Neovim をdiffモードで開く-c "wincmd l" -c "wincmd J"
一個右のペイン(MERGED)にフォーカスを移動して、画面下半分に分割する
または組み込みで以下のmergetoolが定義されているので、 mergetool.layout でレイアウトをカスタマイズしてもよい
❯ git mergetool --tool-help
'git mergetool --tool=<tool>' may be set to one of the following:
araxis Use Araxis Merge (requires a graphical session)
nvimdiff Use Neovim with a custom layout (see `git help mergetool`'s `BACKEND SPECIFIC HINTS` section)
nvimdiff1 Use Neovim with a 2 panes layout (LOCAL and REMOTE)
nvimdiff2 Use Neovim with a 3 panes layout (LOCAL, MERGED and REMOTE)
nvimdiff3 Use Neovim where only the MERGED file is shown
opendiff Use FileMerge (requires a graphical session)
vimdiff Use Vim with a custom layout (see `git help mergetool`'s `BACKEND SPECIFIC HINTS` section)
vimdiff1 Use Vim with a 2 panes layout (LOCAL and REMOTE)
vimdiff2 Use Vim with a 3 panes layout (LOCAL, MERGED and REMOTE)
vimdiff3 Use Vim where only the MERGED file is shown
user-defined:
neovimdiff.cmd nvim -d $LOCAL $REMOTE $MERGED -c '$wincmd w' -c 'wincmd J'
The following tools are valid, but not currently available:
bc Use Beyond Compare (requires a graphical session)
bc3 Use Beyond Compare (requires a graphical session)
bc4 Use Beyond Compare (requires a graphical session)
codecompare Use Code Compare (requires a graphical session)
deltawalker Use DeltaWalker (requires a graphical session)
diffmerge Use DiffMerge (requires a graphical session)
diffuse Use Diffuse (requires a graphical session)
ecmerge Use ECMerge (requires a graphical session)
emerge Use Emacs' Emerge
examdiff Use ExamDiff Pro (requires a graphical session)
guiffy Use Guiffy's Diff Tool (requires a graphical session)
gvimdiff Use gVim (requires a graphical session) with a custom layout (see `git help mergetool`'s `BACKEND SPECIFIC HINTS` section)
gvimdiff1 Use gVim (requires a graphical session) with a 2 panes layout (LOCAL and REMOTE)
gvimdiff2 Use gVim (requires a graphical session) with a 3 panes layout (LOCAL, MERGED and REMOTE)
gvimdiff3 Use gVim (requires a graphical session) where only the MERGED file is shown
kdiff3 Use KDiff3 (requires a graphical session)
meld Use Meld (requires a graphical session) with optional `auto merge` (see `git help mergetool`'s `CONFIGURATION` section)
p4merge Use HelixCore P4Merge (requires a graphical session)
smerge Use Sublime Merge (requires a graphical session)
tkdiff Use TkDiff (requires a graphical session)
tortoisemerge Use TortoiseMerge (requires a graphical session)
winmerge Use WinMerge (requires a graphical session)
xxdiff Use xxdiff (requires a graphical session)
[merge]
tool = nvimdiff
[mergetool "nvimdiff"]
layout = "LOCAL,BASE,REMOTE / MERGED"
テスト
リポジトリ初期化
hello.txt
をコミット
別ブランチで変更を加える
mainブランチに戻ってコンフリクトするように変更を加える
マージするとコンフリクトが発生するので、mergetoolを実行する
変更を適用するには、下画面(MERGED)で直接ファイルを編集するか、以下コマンドでどちらかを取り込む。
:diffg REM # get from REMOTE
:diffg LOC # get from LOCAL