Go to file
2020-10-24 16:34:19 +01:00
lua Use error code when getting index blob 2020-10-24 16:34:19 +01:00
.luacheckrc Lint all files through luacheck 2020-10-22 17:51:41 +01:00
LICENSE Initial commit 2020-10-18 11:14:44 +01:00
Makefile Lint all files through luacheck 2020-10-22 17:51:41 +01:00
README.md Add TODO to README 2020-10-22 18:55:34 +01:00

gitsigns.nvim

Git signs written in pure lua.

WIP

Features:

  • Signs for added, removed, and changed lines
  • Asynchronous using luv
  • Navigation between diff blocks (hunks)
  • Stage partial diffs
  • Customisable (signs, highlights, mappings, etc)
  • Status bar integration

Requirements

Neovim nightly

Installation

packer.nvim:

use 'nvim-lua/plenary.nvim'
use 'lewis6991/gitsigns.nvim'

vim-plug:

Plug 'nvim-lua/plenary.nvim'
Plug 'lewis6991/gitsigns.nvim'

Usage

For basic setup with all batteries included:

require('gitsigns').setup()

Configuration can be passed to the setup function. Here is an example with all the default settings:

require('gitsigns').setup {
  signs = {
    add          = {hl = 'DiffAdd'   , text = '│'},
    change       = {hl = 'DiffChange', text = '│'},
    delete       = {hl = 'DiffDelete', text = '_'},
    topdelete    = {hl = 'DiffDelete', text = '_'},
    changedelete = {hl = 'DiffChange', text = '~'},
  },
  keymaps = {
    [']c']         = '<cmd>lua require("gitsigns").next_hunk()<CR>',
    ['[c']         = '<cmd>lua require("gitsigns").prev_hunk()<CR>',
    ['<leader>hs'] = '<cmd>lua require("gitsigns").stage_hunk()<CR>',
    ['<leader>gh'] = '<cmd>lua require("gitsigns").get_hunk()<CR>'
  },
  watch_index = {
    enabled = true,
    interval = 1000
  }
}

For information on configuring neovim via lua please see nvim-lua-guide.

Status Line

Use b:gitsigns_status or b:gitsigns_status_dict. b:gitsigns_status is a preformatted and ready to use string (e.g. +10 -5 ~1) and ommits zero values. b:gitsigns_status_dictis a dictionary with the keys added, removed, changed.

Example:

set statusline+=%{get(b:,'gitsigns_status','')}

TODO

  • Add action for undoing a stage of a hunk
  • Add action for undoing a hunk
  • Add action for showing diff (or original text) in a floating window
  • Add ability to show staged hunks with different signs (maybe in a different sign column?)