Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/akinsho/git-conflict.nvim

A plugin to visualise and resolve merge conflicts in neovim
https://github.com/akinsho/git-conflict.nvim

Last synced: 2 months ago
JSON representation

A plugin to visualise and resolve merge conflicts in neovim

Lists

README

        

# git-conflict.nvim

https://user-images.githubusercontent.com/22454918/159362564-a66d8c23-f7dc-4d1d-8e88-c5c73a49047e.mov

A plugin to visualise and resolve conflicts in neovim.
This plugin was inspired by [conflict-marker.vim](https://github.com/rhysd/conflict-marker.vim)

## Status

This plugin is under active development, it should generally work, but you're likely to
encounter some bugs during usage.

## Requirements

- `git`
- `nvim 0.7+`

## Installation

```lua
-- packer.nvim
use {'akinsho/git-conflict.nvim', tag = "*", config = function()
require('git-conflict').setup()
end}

-- lazy.nvim
{'akinsho/git-conflict.nvim', version = "*", config = true}
```

I recommend using the {tag|version} field of your package manager, so your version of this plugin is only updated when a new tag is pushed as `main` itself might be **unstable**.

## Configuration

```lua
{
default_mappings = true, -- disable buffer local mapping created by this plugin
default_commands = true, -- disable commands created by this plugin
disable_diagnostics = false, -- This will disable the diagnostics in a buffer whilst it is conflicted
list_opener = 'copen', -- command or function to open the conflicts list
highlights = { -- They must have background color, otherwise the default color will be used
incoming = 'DiffAdd',
current = 'DiffText',
}
}
```

## Commands

- `GitConflictChooseOurs` — Select the current changes.
- `GitConflictChooseTheirs` — Select the incoming changes.
- `GitConflictChooseBoth` — Select both changes.
- `GitConflictChooseNone` — Select none of the changes.
- `GitConflictNextConflict` — Move to the next conflict.
- `GitConflictPrevConflict` — Move to the previous conflict.
- `GitConflictListQf` — Get all conflict to quickfix

### Listing conflicts

You can list conflicts in the quick fix list using the `GitConflictListQf` command

Screen Shot 2022-03-27 at 12 03 43

quickfix displayed using [nvim-pqf](https://gitlab.com/yorickpeterse/nvim-pqf)

## Autocommands

When a conflict is detected by this plugin a `User` autocommand is fired
called `GitConflictDetected`. When this is resolved another command is
fired called `GitConflictResolved`.

Either of these can be used to run logic whilst dealing with conflicts
e.g.

```lua
vim.api.nvim_create_autocmd('User', {
pattern = 'GitConflictDetected',
callback = function()
vim.notify('Conflict detected in '..vim.fn.expand(''))
vim.keymap.set('n', 'cww', function()
engage.conflict_buster()
create_buffer_local_mappings()
end)
end
})

```

## Mappings

This plugin offers default buffer local mappings inside conflicted files. This is primarily because applying these mappings only to relevant buffers
is impossible through global mappings. A user can however disable these by setting `default_mappings = false` anyway and create global mappings as shown below.
The default mappings are:

- co — choose ours
- ct — choose theirs
- cb — choose both
- c0 — choose none
- ]x — move to previous conflict
- [x — move to next conflict

If you would rather not use these then you can specify your own mappings.

```lua
require'git-conflict'.setup {
default_mappings = {
ours = 'o',
theirs = 't',
none = '0',
both = 'b',
next = 'n',
prev = 'p',
},
}
```

or alternatively, set `default_mappings = false` and apply the mappings yourself

example manual mappings

```lua
vim.keymap.set('n', 'co', '(git-conflict-ours)')
vim.keymap.set('n', 'ct', '(git-conflict-theirs)')
vim.keymap.set('n', 'cb', '(git-conflict-both)')
vim.keymap.set('n', 'c0', '(git-conflict-none)')
vim.keymap.set('n', ']x', '(git-conflict-prev-conflict)')
vim.keymap.set('n', '[x', '(git-conflict-next-conflict)')
```

## API

This plugin exposes an API to extract some of the data it collects for other
purposes.

conflict_count({bufnr})

```vimdoc
Returns the amount of conflicts in a given buffer.

Parameters:
{bufnr} (number) Specify the buffer for which you want to know the
amount of conflicts (default: current buffer).

Return:
number: The amount of conflicts.
```

## Issues

**Please read this** — This plugin is not intended to do anything other than provide fancy visuals, and some mappings to handle conflict resolution
It will not be expanded to become a full git management plugin, there are a zillion plugins that do that already, this won't be one of those.

### Feature requests

Open source should be collaborative, if you have an idea for a feature you'd like to see added. Submit a PR rather than a feature request.