GitLens is a VSCode plugin that, among other things, allows you to see the time, commit author, and commit message of the current line. With a little help from to the neovim api and our shell, it we can recreate this functionality in a few lines of lua code.

    The Code

    -- in utils.lua
    local M = {}
    local api = vim.api
    function M.blameVirtText()
      local ft = vim.fn.expand('%:h:t') -- get the current file extension
      if ft == '' then -- if we are in a scratch buffer or unknown filetype
      if ft == 'bin' then -- if we are in nvim's terminal window
      api.nvim_buf_clear_namespace(0, 2, 0, -1) -- clear out virtual text from namespace 2 (the namespace we will set later)
      local currFile = vim.fn.expand('%')
      local line = api.nvim_win_get_cursor(0)
      local blame = vim.fn.system(string.format('git blame -c -L %d,%d %s', line[1], line[1], currFile))
      local hash = vim.split(blame, '%s')[1]
      local cmd = string.format("git show %s ", hash).."--format='%an | %ar | %s'"
      if hash == '00000000' then
        text = 'Not Committed Yet'
        text = vim.fn.system(cmd)
        text = vim.split(text, '\n')[1]
        if text:gmatch("fatal") then -- if the call to git show fails
          text = 'Not Committed Yet'
      api.nvim_buf_set_virtual_text(0, 2, line[1] - 1, {{ text,'GitLens' }}, {}) -- set virtual text for namespace 2 with the content from git and assign it to the higlight group 'GitLens'
    function M.clearBlameVirtText() -- important for clearing out the text when our cursor moves
      api.nvim_buf_clear_namespace(0, 2, 0, -1)
    return M
    " in init.vim
    lua vim.api.nvim_command [[autocmd CursorHold   * lua require'utils'.blameVirtText()]]
    lua vim.api.nvim_command [[autocmd CursorMoved  * lua require'utils'.clearBlameVirtText()]]
    lua vim.api.nvim_command [[autocmd CursorMovedI * lua require'utils'.clearBlameVirtText()]]
    hi! link GitLens Comment

    See Also

    Mentioned around the web

    commented on Feb 15, 2020 see original

    This is really cool, thanks for sharing

    commented on Feb 11, 2020 see original

    Is there an installable form for this?

    commented on Feb 14, 2020 see original

    Source at /r/neovim

    commented on Feb 11, 2020 see original


    This one's vimscript and somewhat longer but has been working well for me:

    commented on Sep 10, 2020 see original

    Another one: svermeulen/vimpeccable

    commented on Aug 8, 2020 see original

    Throwing my own hat into the ring :D

    Fennel is a Lisp which I compile to Lua for all of my configuration and plugins.

    commented on Aug 8, 2020 see original
    Just a bunch of articles about using lua in neovim config and neovim plugins: - - - - Upd:

    Mentioned on