-
-
Notifications
You must be signed in to change notification settings - Fork 610
Archived
The legacy view.mappings.list
mechanism for defining mappings has now been completely removed. on_attach
is the one and only means to define mappings.
You will receive an error on startup when view.mappings.list
is defined and no mappings will be applied.
If have not migrated your view.mappings.list
you can do so by reverting nvim-tree.lua to ace6422
and following this guide.
This function runs when the nvim-tree buffer is created.
This is where you define your mappings as well as any other code you'd like to run at this time.
on_attach
is the "standard" neovim mapping mechanism and it offers you full control over your experience.
See :help nvim-tree-mappings
and :help nvim-tree-mappings-legacy
for all the details.
You don't need to do anything right now; your existing view.mappings
and remove_keymaps
will still apply.
These are currently deprecated: you will receive a notification. They will soon be disabled and removed.
Generate an on_attach
function based on your existing view.mappings
and remove_keymaps
:
- Run
:NvimTreeGenerateOnAttach
to create and opennvim-tree-on-attach.lua
. Usually in$XDG_CACHE_HOME/nvim
or%TEMP%\nvim\my_on_attach.lua
- Add that function to your setup lua.
- Set
on_attach = on_attach,
in your configuration. - Insert the contents of your custom functions at
-- your code goes here
- Remove redundant
view.mappings
andremove_keymaps
from your configuration
Legacy config:
local function print_node_path(node)
print(node.absolute_path)
end
view = {
mappings = {
list = {
-- new mappings
{ key = "A", action = "expand_all" },
{ key = "?", action = "toggle_help" },
-- override existing
{ key = "C", action = "cd" },
-- remove existing
{ key = { "<2-RightMouse>" }, action = "" },
{ key = { "D", "E" }, action = "" },
-- custom function
{ key = "P", action = "Print Node Path", action_cb = print_node_path },
-- new mapping
{ key = "Z", action = "system_open" },
},
},
},
remove_keymaps = {
"O",
},
Add on_attach
key to your setup
call:
require("nvim-tree").setup({
on_attach = on_attach,
})
Add the generated function beforehand. Don't forget to require api:
--
-- This function has been generated from your
-- view.mappings.list
-- view.mappings.custom_only
-- remove_keymaps
--
-- You should add this function to your configuration and set on_attach = on_attach in the nvim-tree setup call.
--
-- Although care was taken to ensure correctness and completeness, your review is required.
--
-- Please check for the following issues in auto generated content:
-- "Mappings removed" is as you expect
-- "Mappings migrated" are correct
--
-- Please see https://github.com/nvim-tree/nvim-tree.lua/wiki/Migrating-To-on_attach for assistance in migrating.
--
local function on_attach(bufnr)
local api = require('nvim-tree.api')
local function opts(desc)
return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
end
-- Default mappings. Feel free to modify or remove as you wish.
--
-- BEGIN_DEFAULT_ON_ATTACH
vim.keymap.set('n', '<C-]>', api.tree.change_root_to_node, opts('CD'))
vim.keymap.set('n', '<C-e>', api.node.open.replace_tree_buffer, opts('Open: In Place'))
vim.keymap.set('n', '<C-k>', api.node.show_info_popup, opts('Info'))
vim.keymap.set('n', '<C-r>', api.fs.rename_sub, opts('Rename: Omit Filename'))
vim.keymap.set('n', '<C-t>', api.node.open.tab, opts('Open: New Tab'))
vim.keymap.set('n', '<C-v>', api.node.open.vertical, opts('Open: Vertical Split'))
vim.keymap.set('n', '<C-x>', api.node.open.horizontal, opts('Open: Horizontal Split'))
vim.keymap.set('n', '<BS>', api.node.navigate.parent_close, opts('Close Directory'))
vim.keymap.set('n', '<CR>', api.node.open.edit, opts('Open'))
vim.keymap.set('n', '<Tab>', api.node.open.preview, opts('Open Preview'))
vim.keymap.set('n', '>', api.node.navigate.sibling.next, opts('Next Sibling'))
vim.keymap.set('n', '<', api.node.navigate.sibling.prev, opts('Previous Sibling'))
vim.keymap.set('n', '.', api.node.run.cmd, opts('Run Command'))
vim.keymap.set('n', '-', api.tree.change_root_to_parent, opts('Up'))
vim.keymap.set('n', 'a', api.fs.create, opts('Create'))
vim.keymap.set('n', 'bmv', api.marks.bulk.move, opts('Move Bookmarked'))
vim.keymap.set('n', 'B', api.tree.toggle_no_buffer_filter, opts('Toggle No Buffer'))
vim.keymap.set('n', 'c', api.fs.copy.node, opts('Copy'))
vim.keymap.set('n', 'C', api.tree.toggle_git_clean_filter, opts('Toggle Git Clean'))
vim.keymap.set('n', '[c', api.node.navigate.git.prev, opts('Prev Git'))
vim.keymap.set('n', ']c', api.node.navigate.git.next, opts('Next Git'))
vim.keymap.set('n', 'd', api.fs.remove, opts('Delete'))
vim.keymap.set('n', 'D', api.fs.trash, opts('Trash'))
vim.keymap.set('n', 'E', api.tree.expand_all, opts('Expand All'))
vim.keymap.set('n', 'e', api.fs.rename_basename, opts('Rename: Basename'))
vim.keymap.set('n', ']e', api.node.navigate.diagnostics.next, opts('Next Diagnostic'))
vim.keymap.set('n', '[e', api.node.navigate.diagnostics.prev, opts('Prev Diagnostic'))
vim.keymap.set('n', 'F', api.live_filter.clear, opts('Clean Filter'))
vim.keymap.set('n', 'f', api.live_filter.start, opts('Filter'))
vim.keymap.set('n', 'g?', api.tree.toggle_help, opts('Help'))
vim.keymap.set('n', 'gy', api.fs.copy.absolute_path, opts('Copy Absolute Path'))
vim.keymap.set('n', 'H', api.tree.toggle_hidden_filter, opts('Toggle Dotfiles'))
vim.keymap.set('n', 'I', api.tree.toggle_gitignore_filter, opts('Toggle Git Ignore'))
vim.keymap.set('n', 'J', api.node.navigate.sibling.last, opts('Last Sibling'))
vim.keymap.set('n', 'K', api.node.navigate.sibling.first, opts('First Sibling'))
vim.keymap.set('n', 'm', api.marks.toggle, opts('Toggle Bookmark'))
vim.keymap.set('n', 'o', api.node.open.edit, opts('Open'))
vim.keymap.set('n', 'O', api.node.open.no_window_picker, opts('Open: No Window Picker'))
vim.keymap.set('n', 'p', api.fs.paste, opts('Paste'))
vim.keymap.set('n', 'P', api.node.navigate.parent, opts('Parent Directory'))
vim.keymap.set('n', 'q', api.tree.close, opts('Close'))
vim.keymap.set('n', 'r', api.fs.rename, opts('Rename'))
vim.keymap.set('n', 'R', api.tree.reload, opts('Refresh'))
vim.keymap.set('n', 's', api.node.run.system, opts('Run System'))
vim.keymap.set('n', 'S', api.tree.search_node, opts('Search'))
vim.keymap.set('n', 'U', api.tree.toggle_custom_filter, opts('Toggle Hidden'))
vim.keymap.set('n', 'W', api.tree.collapse_all, opts('Collapse'))
vim.keymap.set('n', 'x', api.fs.cut, opts('Cut'))
vim.keymap.set('n', 'y', api.fs.copy.filename, opts('Copy Name'))
vim.keymap.set('n', 'Y', api.fs.copy.relative_path, opts('Copy Relative Path'))
vim.keymap.set('n', '<2-LeftMouse>', api.node.open.edit, opts('Open'))
vim.keymap.set('n', '<2-RightMouse>', api.tree.change_root_to_node, opts('CD'))
-- END_DEFAULT_ON_ATTACH
-- Mappings removed via:
-- remove_keymaps
-- OR
-- view.mappings.list..action = ""
--
-- The dummy set before del is done for safety, in case a default mapping does not exist.
--
-- You might tidy things by removing these along with their default mapping.
vim.keymap.set('n', 'O', '', { buffer = bufnr })
vim.keymap.del('n', 'O', { buffer = bufnr })
vim.keymap.set('n', '<2-RightMouse>', '', { buffer = bufnr })
vim.keymap.del('n', '<2-RightMouse>', { buffer = bufnr })
vim.keymap.set('n', 'D', '', { buffer = bufnr })
vim.keymap.del('n', 'D', { buffer = bufnr })
vim.keymap.set('n', 'E', '', { buffer = bufnr })
vim.keymap.del('n', 'E', { buffer = bufnr })
-- Mappings migrated from view.mappings.list
--
-- You will need to insert "your code goes here" for any mappings with a custom action_cb
vim.keymap.set('n', 'A', api.tree.expand_all, opts('Expand All'))
vim.keymap.set('n', '?', api.tree.toggle_help, opts('Help'))
vim.keymap.set('n', 'C', api.tree.change_root_to_node, opts('CD'))
vim.keymap.set('n', 'P', function()
local node = api.tree.get_node_under_cursor()
print(node.absolute_path)
end, opts('Print Node Path'))
vim.keymap.set('n', 'Z', api.node.run.system, opts('Run System'))
end
Rather than specifying the default mappings, you may apply them via api.config.mappings.default_on_attach({bufnr})
e.g.
local function my_on_attach(bufnr)
local api = require('nvim-tree.api')
local function opts(desc)
return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
end
api.config.mappings.default_on_attach(bufnr)
vim.keymap.set('n', 'O', '', { buffer = bufnr })
vim.keymap.del('n', 'O', { buffer = bufnr })
vim.keymap.set('n', '<2-RightMouse>', '', { buffer = bufnr })
vim.keymap.del('n', '<2-RightMouse>', { buffer = bufnr })
vim.keymap.set('n', 'D', '', { buffer = bufnr })
vim.keymap.del('n', 'D', { buffer = bufnr })
vim.keymap.set('n', 'E', '', { buffer = bufnr })
vim.keymap.del('n', 'E', { buffer = bufnr })
vim.keymap.set('n', 'A', api.tree.expand_all, opts('Expand All'))
vim.keymap.set('n', '?', api.tree.toggle_help, opts('Help'))
vim.keymap.set('n', 'C', api.tree.change_root_to_node, opts('CD'))
vim.keymap.set('n', 'P', function()
local node = api.tree.get_node_under_cursor()
print(node.absolute_path)
end, opts('Print Node Path'))
vim.keymap.set('n', 'Z', api.node.run.system, opts('Run System'))
end