Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork244
Git integration for buffers
License
lewis6991/gitsigns.nvim
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Deep buffer integration for Git
| Hunk Actions | Line Blame |
|---|---|
![]() | ![]() |
Signs
Hunk Actions
Blame
Diff
Show hunks Quickfix/Location List
Text Object
- Select hunks as a text object.
- Can use
vim.keymap.set({'o', 'x'}, 'ih', '<Cmd>Gitsigns select_hunk<CR>')
Status Line Integration
Useb:gitsigns_status orb:gitsigns_status_dict.b:gitsigns_status isformatted usingconfig.status_formatter.b:gitsigns_status_dict is adictionary with the keysadded,removed,changed andhead.
Example:
setstatusline+=%{get(b:,'gitsigns_status','')}
For the current branch use the variableb:gitsigns_head.
Show different revisions of buffers
- Use
:Gitsigns show <REVISION>to:editthe current buffer at<REVISION>
- Neovim >= 0.9.0
Tip
If your version of Neovim is too old, then you can use a pastrelease.
Warning
If you are running a development version of Neovim (akamaster), thenbreakage may occur if your build is behind latest.
- Newish version of git. Older versions may not work with some features.
Install using your package manager of choice. No setup required.
Optional configuration can be passed to the setup function. Here is an examplewith most of the default settings:
require('gitsigns').setup {signs= {add= {text='┃'},change= {text='┃'},delete= {text='_'},topdelete= {text='‾'},changedelete= {text='~'},untracked= {text='┆'}, },signs_staged= {add= {text='┃'},change= {text='┃'},delete= {text='_'},topdelete= {text='‾'},changedelete= {text='~'},untracked= {text='┆'}, },signs_staged_enable=true,signcolumn=true,-- Toggle with `:Gitsigns toggle_signs`numhl=false,-- Toggle with `:Gitsigns toggle_numhl`linehl=false,-- Toggle with `:Gitsigns toggle_linehl`word_diff=false,-- Toggle with `:Gitsigns toggle_word_diff`watch_gitdir= {follow_files=true },auto_attach=true,attach_to_untracked=false,current_line_blame=false,-- Toggle with `:Gitsigns toggle_current_line_blame`current_line_blame_opts= {virt_text=true,virt_text_pos='eol',-- 'eol' | 'overlay' | 'right_align'delay=1000,ignore_whitespace=false,virt_text_priority=100,use_focus=true, },current_line_blame_formatter='<author>, <author_time:%R> - <summary>',sign_priority=6,update_debounce=100,status_formatter=nil,-- Use defaultmax_file_length=40000,-- Disable if file is longer than this (in lines)preview_config= {-- Options passed to nvim_open_winstyle='minimal',relative='cursor',row=0,col=1 },}
For information on configuring Neovim via lua please seenvim-lua-guide.
Gitsigns provides anon_attach callback which can be used to setup buffer mappings.
Here is a suggested example:
require('gitsigns').setup{...on_attach=function(bufnr)localgitsigns=require('gitsigns')localfunctionmap(mode,l,r,opts)opts=optsor {}opts.buffer=bufnrvim.keymap.set(mode,l,r,opts)end-- Navigationmap('n',']c',function()ifvim.wo.diffthenvim.cmd.normal({']c',bang=true})elsegitsigns.nav_hunk('next')endend)map('n','[c',function()ifvim.wo.diffthenvim.cmd.normal({'[c',bang=true})elsegitsigns.nav_hunk('prev')endend)-- Actionsmap('n','<leader>hs',gitsigns.stage_hunk)map('n','<leader>hr',gitsigns.reset_hunk)map('v','<leader>hs',function()gitsigns.stage_hunk({vim.fn.line('.'),vim.fn.line('v') })end)map('v','<leader>hr',function()gitsigns.reset_hunk({vim.fn.line('.'),vim.fn.line('v') })end)map('n','<leader>hS',gitsigns.stage_buffer)map('n','<leader>hR',gitsigns.reset_buffer)map('n','<leader>hp',gitsigns.preview_hunk)map('n','<leader>hi',gitsigns.preview_hunk_inline)map('n','<leader>hb',function()gitsigns.blame_line({full=true })end)map('n','<leader>hd',gitsigns.diffthis)map('n','<leader>hD',function()gitsigns.diffthis('~')end)map('n','<leader>hQ',function()gitsigns.setqflist('all')end)map('n','<leader>hq',gitsigns.setqflist)-- Togglesmap('n','<leader>tb',gitsigns.toggle_current_line_blame)map('n','<leader>tw',gitsigns.toggle_word_diff)-- Text objectmap({'o','x'},'ih',gitsigns.select_hunk)end}
When viewing revisions of a file (via:0Gclog for example), Gitsigns will attach to the fugitive buffer with the base set to the commit immediately before the commit of that revision.This means the signs placed in the buffer reflect the changes introduced by that revision of the file.
If installed and enabled (viaconfig.trouble; defaults to true if installed),:Gitsigns setqflist or:Gitsigns setloclist will open Trouble instead of Neovim's built-in quickfix or location list windows.
Implement every feature invim-fugitive
This plugin is actively developed and by one of the most well regarded vim plugin developers.Gitsigns will only implement features of this plugin if: it is simple, or, the technologies leveraged by Gitsigns (LuaJIT, Libuv, Neovim's API, etc) can provide a better experience.
There aren't any active developers of this plugin who use other kinds of VCS, so adding support for them isn't feasible.However a well written PR with a commitment of future support could change this.
About
Git integration for buffers
Topics
Resources
License
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.











