Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Git integration for buffers

License

NotificationsYou must be signed in to change notification settings

lewis6991/gitsigns.nvim

Repository files navigation

CIVersionLicense: MITDotfyle

Deep buffer integration for Git

👀 Preview

Hunk ActionsLine Blame

✨ Features

Signs
  • Adds signs to the sign column to indicate added, changed, and deleted lines.

    image

  • Supports different signs for staged changes.

    image

  • Add counts to signs.

    image

Hunk Actions
  • Stage/unstage hunks with:Gitsigns stage_hunk.

  • Reset hunks with:Gitsigns reset_hunk.

  • Also works on partial hunks in visual mode.

  • Preview hunks inline with:Gitsigns preview_hunk_inline

    image

  • Preview hunks in popup with:Gitsigns preview_hunk

    image

  • Navigate between hunks with:Gitsigns nav_hunk next/prev.

Blame
  • Show blame of current buffer using:Gitsigns blame.

    image

  • Show blame information for the current line in popup with:Gitsigns blame_line.

    image

  • Show blame information for the current line in virtual text.

    image

    • Enable withsetup({ current_line_blame = true }).
    • Toggle with:Gitsigns toggle_current_line_blame
Diff
  • Change the revision for the signs with:Gitsigns change_base <REVISION>.

  • Show the diff of the current buffer with the index or any revisionwith:Gitsigns diffthis <REVISION>.

  • Show intra-line word-diff in the buffer.

    image

    • Enable withsetup({ word_diff = true }).
    • Toggle with:Gitsigns toggle_word_diff.
Show hunks Quickfix/Location List
  • Set the quickfix/location list with changes with:Gitsign setqflist/setloclist.

    image

    Can show hunks for:

    • whole repository (target=all)
    • attached buffers (target=attached)
    • a specific buffer (target=[integer]).
Text Object
  • Select hunks as a text object.
  • Can usevim.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:edit the current buffer at<REVISION>

📋 Requirements

  • 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.

🛠️ Installation & Usage

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.

🎹 Keymaps

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}

🔗 Plugin Integrations

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.

🚫 Non-Goals

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.

Support for other VCS

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.

🔌 Similar plugins


[8]ページ先頭

©2009-2025 Movatter.jp