A git blame plugin for Neovim written in Lua
Using vim-plug
Plug 'f-person/git-blame.nvim'
- Neovim >= 0.5.0
- git
There were several Vim plugins providing this functionality, however most of them were written in VimScript and didn't work well for me. coc-git also had option for showing blame info, it worked really well for me, I like it. However, recently I decided to switch to Neovim's builtin LSP instead of using CoC and having something running on Node.js just for git blame was not the best thing.
Enables git-blame.nvim on neovim startup.
You can toggle git blame messages on/off with the :GitBlameToggle
command.
Default: 1
let g:gitblame_enabled = 0
The template for the blame message that will be shown.
Default: ' <author> • <date> • <summary>'
Available options: <author>
, <committer>
, <date>
, <committer-date>
, <summary>
, <sha>
let g:gitblame_message_template = '<summary> • <date> • <author>'
The format of the date fields.
Default: %c
Available options:
%r relative date (e.g., 3 days ago)
%a abbreviated weekday name (e.g., Wed)
%A full weekday name (e.g., Wednesday)
%b abbreviated month name (e.g., Sep)
%B full month name (e.g., September)
%c date and time (e.g., 09/16/98 23:48:10)
%d day of the month (16) [01-31]
%H hour, using a 24-hour clock (23) [00-23]
%I hour, using a 12-hour clock (11) [01-12]
%M minute (48) [00-59]
%m month (09) [01-12]
%p either "am" or "pm" (pm)
%S second (10) [00-61]
%w weekday (3) [0-6 = Sunday-Saturday]
%x date (e.g., 09/16/98)
%X time (e.g., 23:48:10)
%Y full year (1998)
%y two-digit year (98) [00-99]
%% the character `%´
let g:gitblame_date_format = '%r'
The highlight group for virtual text.
Default: Comment
let g:gitblame_highlight_group = "Question"
nvim_buf_set_extmark
is the function used for setting the virtual text.
You can view an up-to-date full list of options in the
Neovim documentation.
Warning: overwriting id
and virt_text
will break the plugin behavior.
let g:gitblame_set_extmark_options = {
\ 'priority': 7,
\ }
Whether or not blame message should be displayed as virtual text. You may want to disable this if you display the blame message in statusline.
Default: 1
let g:gitblame_display_virtual_text = 0
A list of filetypes for which gitblame information will not be displayed.
Default: []
let g:gitblame_ignored_filetypes = ['lua', 'c']
:GitBlameOpenCommitURL
opens the commit URL of commit under the cursor.
Tested to work with GitHub and GitLab.
:GitBlameToggle
toggles git blame on/off,:GitBlameEnable
enables git blame messages,:GitBlameDisable
disables git blame messages.
:GitBlameCopySHA
copies the SHA hash of current line's commit into
the system keyboard.
The plugin provides you with two functions which you can incorporate into your statusline of choice:
-- Lua
local git_blame = require('gitblame')
git_blame.is_blame_text_available() -- Returns a boolean value indicating whether blame message is available
git_blame.get_current_blame_text() -- Returns a string with blame message
Here is an example of integrating with lualine.nvim:
-- Lua
vim.g.gitblame_display_virtual_text = 0 -- Disable virtual text
local git_blame = require('gitblame')
require('lualine').setup({
sections = {
lualine_c = {
{ git_blame.get_current_blame_text, cond = git_blame.is_blame_text_available }
}
}
})
The plugin uses lua-timeago for displaying commit dates in a relative time ago format. Take a look at the languages directory for a list of pre-installed languages. If you wish to use a language, that's not built into lua-timeago, you can do that too; please consider opening a PR to lua-timeago if you do so :)
In order to set a language, call the set_language
method:
-- Lua
require('lua-timeago').set_language(require('lua-timeago/languages/hy'))
" Vimscript
:lua require('lua-timeago').set_language(require('lua-timeago/languages/hy'))
- coc-git for some parts of code.
- blamer.nvim for documentation inspiration.