Skip to content

jiaoshijie/undotree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

undotree

A neovim undotree plugin written in lua.

Screenshot

preview

Diff previewer window shows the difference between the current node and the node under the cursor.

Requirements

  • nvim 0.7.0 or above

Download and Install

Using Vim's built-in package manager:

mkdir -p ~/.config/nvim/pack/github/start/
cd ~/.config/nvim/pack/github/start/
git clone https://github.com/nvim-lua/plenary.nvim.git
git clone https://github.com/jiaoshijie/undotree.git

Using vim-plug

Plug 'nvim-lua/plenary.nvim'
Plug 'jiaoshijie/undotree'

Using packer.nvim

use {
  "jiaoshijie/undotree",
  requires = {
    "nvim-lua/plenary.nvim",
  },
}

Using lazy.nvim

{
  "jiaoshijie/undotree",
  dependencies = "nvim-lua/plenary.nvim",
  config = true,
  keys = { -- load the plugin only when using it's keybinding:
    { "<leader>u", "<cmd>lua require('undotree').toggle()<cr>" },
  },
}

Usage

Basic setup

require('undotree').setup()

If using packer.nvim undotree can be setup directly in the plugin spec:

use {
  "jiaoshijie/undotree",
  config = function()
    require('undotree').setup()
  end,
  requires = {
    "nvim-lua/plenary.nvim",
  },
}

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

local undotree = require('undotree')

undotree.setup({
  float_diff = true,  -- using float window previews diff, set this `true` will disable layout option
  layout = "left_bottom", -- "left_bottom", "left_left_bottom"
  position = "left", -- "right", "bottom"
  ignore_filetype = { 'undotree', 'undotreeDiff', 'qf', 'TelescopePrompt', 'spectre_panel', 'tsplayground' },
  window = {
    winblend = 30,
  },
  keymaps = {
    ['j'] = "move_next",
    ['k'] = "move_prev",
    ['gj'] = "move2parent",
    ['J'] = "move_change_next",
    ['K'] = "move_change_prev",
    ['<cr>'] = "action_enter",
    ['p'] = "enter_diffbuf",
    ['q'] = "quit",
  },
})

You can directly use :lua require('undotree').toggle() for toggling undotree panel, or set the following keymaps for convenient using.

vim.keymap.set('n', '<leader>u', require('undotree').toggle, { noremap = true, silent = true })

-- or
vim.keymap.set('n', '<leader>uo', require('undotree').open, { noremap = true, silent = true })
vim.keymap.set('n', '<leader>uc', require('undotree').close, { noremap = true, silent = true })
  1. Some Mappings
Mappings Action
j jump to next undo node
gj jump to the parent node of the node under the cursor
k jump to prev undo node
J jump to next undo node and undo to this state
K jump to prev undo node and undo to this state
q quit undotree
p jump into the undotree diff window
Enter undo to this state

License

MIT