From 10777c32f603c187316d2c1cacc665c7f34dd0b7 Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Tue, 14 Oct 2025 14:07:40 +0200 Subject: [PATCH] actually make the vim syntax work nicely + document it --- README.md | 13 ++++++++++++- vim/werge.vim | 29 +++++++++++++++++++++++++++++ vim/wergediff.vim | 8 -------- 3 files changed, 41 insertions(+), 9 deletions(-) create mode 100644 vim/werge.vim delete mode 100644 vim/wergediff.vim diff --git a/README.md b/README.md index 4c12478..9683fa4 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,16 @@ In any other case, you may set up a path to any compatible `diff` and `patch` (or suitable wrapper scripts) via environment variables `WERGE_DIFF` and `WERGE_PATCH`. (If required, the same applies for `WERGE_GIT`.) +### Editor integration + +There's a `vim` syntax highlighting file in `vim/werge.vim`. To install, simply +copy it to your local `vim` syntax configuration directory (usually to +`~/.vim/syntax/werge.vim`). Then, you can activate the syntax in vim with: + +``` +:set syn=werge +``` + ## Demo ##### Original (`old` file): @@ -74,7 +84,8 @@ Violets are blue. Patching is hard.<<<<< I still||||| I===== I>>>>> cannot do verses. ``` -(NOTE: option `-G` gives nicely colored output that is much easier to read.) +(NOTE: option `-G` gives nicely colored output that is much easier to read. +Alternatively you can install the syntax highlighting for `vim`.) ##### Merge with separate space resultion Adding option `-s` to `werge merge` causes it to resolve space conflicts diff --git a/vim/werge.vim b/vim/werge.vim new file mode 100644 index 0000000..0997437 --- /dev/null +++ b/vim/werge.vim @@ -0,0 +1,29 @@ +" Vim syntax file +" Language: werge +" Maintainer: Mirek Kratochvil +" Last Change: Oct 14, 2025 +" Version: 1 +" URL: https://github.com/exaexa/werge + +" quit if a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" syntax for the werge files +syntax region wergeHunk start=/<<<<>>>>/ contains=wergeRm,wergeDiffAdd,wergeConflictOrigAdd +syntax region wergeRm start=/<<<<=]\|>\{1,4\}>\@!\|=\{1,4\}=\@!\)*>>>>>/ms=s+5,me=e-5 contained +syntax match wergeConflictOrigAdd /|||||\([^=>]\|=\{1,4\}=\@!\|>\{1,4\}>\@!\)*=====\([^=>]\|=\{1,4\}=\@!\|>\{1,4\}>\@!\)*>>>>>/me=e-5 contained contains=wergeConflictOrig,wergeconflictAdd +syntax region wergeConflictOrig start=/|||||/hs=e+1 end=/=====/he=s-1,me=s-1 contained +syntax region wergeConflictAdd start=/=====/hs=e+1 end=/>>>>>/he=s-1,me=s-1 contained + +" color specification +highlight default link wergeHunk Comment +highlight default link wergeRm Removed +highlight default link wergeDiffAdd Added +highlight default link wergeConflictOrigAdd Comment +highlight default link wergeConflictOrig Changed +highlight default link wergeConflictAdd Added + +let b:current_syntax = "werge" diff --git a/vim/wergediff.vim b/vim/wergediff.vim deleted file mode 100644 index 6766e06..0000000 --- a/vim/wergediff.vim +++ /dev/null @@ -1,8 +0,0 @@ - -syntax region wergeDiffChange start=/<<<<>>>>/ contains=wergeDiffRm,wergeDiffAdd -syntax region wergeDiffRm start=/<<<<>>>>/he=b-1,me=b-1 contained - -highlight default link wergeDiffChange Comment -highlight default link wergeDiffRm Removed -highlight default link wergeDiffAdd Added