{"id":18321904,"url":"https://github.com/agriffis/vimmerge","last_synced_at":"2026-04-15T13:32:12.079Z","repository":{"id":8543783,"uuid":"10164815","full_name":"agriffis/vimmerge","owner":"agriffis","description":"vim wrapper for merges","archived":false,"fork":false,"pushed_at":"2018-03-22T15:15:56.000Z","size":402,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-24T10:34:50.050Z","etag":null,"topics":["diff","git","git-mergetool","merge","mergetool","vim","vimdiff"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/agriffis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-05-20T02:47:20.000Z","updated_at":"2025-02-13T17:32:08.000Z","dependencies_parsed_at":"2022-09-18T01:10:37.728Z","dependency_job_id":null,"html_url":"https://github.com/agriffis/vimmerge","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/agriffis/vimmerge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agriffis%2Fvimmerge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agriffis%2Fvimmerge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agriffis%2Fvimmerge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agriffis%2Fvimmerge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/agriffis","download_url":"https://codeload.github.com/agriffis/vimmerge/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agriffis%2Fvimmerge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31842864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T13:28:40.153Z","status":"ssl_error","status_checked_at":"2026-04-15T13:28:29.396Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["diff","git","git-mergetool","merge","mergetool","vim","vimdiff"],"created_at":"2024-11-05T18:22:20.885Z","updated_at":"2026-04-15T13:32:12.062Z","avatar_url":"https://github.com/agriffis.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"vimmerge\n========\n\nWrapper for merging with vim. Handles 2- and 3-way merges, also\ngit merges with RCS conflict markers.\n\n[![asciicast](vimmerge.gif)](https://asciinema.org/a/171484)\n\ninstall\n-------\n\nVimmerge is just one script, so you can install by downloading to any\ndirectory in the path. For example:\n\n    cd /usr/local/bin\n    sudo curl -O https://raw.githubusercontent.com/agriffis/vimmerge/master/vimmerge\n    sudo chmod +x vimmerge\n\nusage\n-----\n\n### git merge\n\nThe screencast above demonstrates using vimmerge with git:\n\n    git merge branch   # conflicts!\n    git status         # find a file that's in conflict\n    vimmerge filename\n\nAt this point you have two windows in vim, just as you would have with\nvimdiff. One window is the conflicts from the merge, the other window is\nyour file. You can use [window movement keys](http://vimdoc.sourceforge.net/htmldoc/windows.html#window-move-cursor)\nand [diff commands](http://vimdoc.sourceforge.net/htmldoc/diff.html#copy-diffs) to\nresolve the conflicts, then write out your file when you're done.\n\nIf you `:qa!` (quit without writing) then nothing is modified on disk.\n\n### git mergetool\n\nGit has a slightly more sophisticated approach to merges using the\nmergetool command, which automates some of the flow. Vimmerge works well\nas git mergetool. Here's the config:\n\n    git config --global merge.tool vimmerge\n    git config --global mergetool.vimmerge.cmd 'vimmerge \\\"$MERGED\\\"'\n\nYou might also want this to avoid `.orig` files littering your working\ntree:\n\n    git config --global mergetool.keepBackup false\n\nNow when you merge with conflicts, it's a bit more streamlined:\n\n    git merge branch  # conflicts!\n    git mergetool     # runs vimmerge in sequence on conflicting files\n\nAs it works without mergetool, you now have two windows in vim. One window\nis the conflicts from the merge, the other window is your file. You can use\n[window movement keys](http://vimdoc.sourceforge.net/htmldoc/windows.html#window-move-cursor)\nand [diff commands](http://vimdoc.sourceforge.net/htmldoc/diff.html#copy-diffs) to\nresolve the conflicts, then write out your file when you're done.\n\nIf you `:qa!` (quit without writing) then nothing is modified on disk.\n\n### non-git modes\n\nThis script is pretty flexible and varies depending on the command-line\narguments. Two-way merges look like this:\n\n    vimmerge one two           # same as vimdiff\n    vimmerge one two -w three  # like vimdiff, with output to new file\n\nThree-way merges are where it gets interesting, because you have a base\nthat's a common ancestor of the conflicting files. By default the file\nordering is the same as diff3, but unlike diff3 it saves the results in\n\"mine\" by default:\n\n    vimmerge mine older yours\n\nTo write to a new file, use -w:\n\n    vimmerge -w merged mine older yours\n\nYou can also use explicit arguments for the files, rather than relying on\norder:\n\n    vimmerge -o older -y yours -m mine -w merged\n\nSome calling programs insist on blindly passing the files in a certain\norder. You can use `--order` to work around those:\n\n    vimmerge --order oymw older yours mine merged\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagriffis%2Fvimmerge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagriffis%2Fvimmerge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagriffis%2Fvimmerge/lists"}