LoginSignup
3
5

More than 5 years have passed since last update.

neovim+diffchar.vimでgitコンフリクト解消時に単語の差分も見れるようにする

Last updated at Posted at 2018-09-08

概要

gitのマージツールをneovimにしていたのだが、デフォルトのままだと単語ごとの差分が表示されないため、csvなどのマージの際にコンフリクトした箇所をわざわざ違うdiffツールを使って差分を確認するなどの面倒な作業が発生していた。

スクリーンショット 2018-09-08 19.04.16.png

これが不便だったので、diffchar.vimを使って、単語ごとの差分を出すようにした。

環境

OS

macOS High Sierra 10.13.6

neovim

NVIM v0.2.2
Build type: Release
LuaJIT 2.0.5
Compilation: /usr/local/Homebrew/Library/Homebrew/shims/super/clang -Wconversion -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DNDEBUG -DMIN_LOG_LEVEL=3 -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fdiagnostics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -I/tmp/neovim-20180209-92407-udkzoo/neovim-0.2.2/build/config -I/tmp/neovim-20180209-92407-udkzoo/neovim-0.2.2/src -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/opt/gettext/include -I/usr/include -I/tmp/neovim-20180209-92407-udkzoo/neovim-0.2.2/build/src/nvim/auto -I/tmp/neovim-20180209-92407-udkzoo/neovim-0.2.2/build/include
Compiled by brew@HighSierra.local

Features: +acl +iconv +jemalloc +tui
See ":help feature-compile"

      システム vimrc: "$VIM/sysinit.vim"
       省略時の $VIM: "/usr/local/Cellar/neovim/0.2.2_1/share/nvim"

Run :checkhealth for more info

git

git version 2.17.0

導入手順

diffchar.vimをインストール

プラグインマネージャーを使うのが楽。
自分の場合はdeinを使用。

dein.toml
[[plugins]]
repo = 'rickhowe/diffchar.vim'

diffchar.vimの設定

ドキュメントを参考にdiff表示の設定。
自分は以下のように設定。

init.vim
let g:DiffUnit = 'Char' " any single character
let g:DiffColors = 3 " 16 colors in fixed order

gitconfigの設定

以下のコマンドでgitconfigを編集

git config --global --edit
[merge]
  tool = nvim
[mergetool "nvim"]
  cmd = nvim -c '2wincmd w | diffthis | 3wincmd w | diffthis | 1wincmd w | wincmd J' -O $MERGED $LOCAL $REMOTE

$LOCALペインと$REMOTEペインをdiffモードで比較し、$MERGEDペインを下部に移動している。
まわりくどいように思えるが、こうすることで$MERGEDペインをdiffモードに入れずに表示することができる。

結果

単語ごとの差分が表示されるようになった!
スクリーンショット 2018-09-08 23.07.31.png

参考

2018/9/9追記

こちら@rickhowe さんに

cmd = nvim -d \"$LOCAL\" \"$REMOTE\" \"$MERGED\" -c '2 wincmd l | wincmd J | wincmd k'

だと、$MERGEDのペインもdiffモードで比較されてしまうので、よくないとのことで改良案をいただいたのでそちらのコマンドに変更しました。
ありがとうございます。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5