Repository navigation
Refactor the mappings created by the new on_attach generation function. #2226
Copy link
Copy link
Closed
Labels
Description
Is it possible to refactor the code generated by the new on_attach function? The actual code is easy to understand for sure, but if we could have something like this would improve not only readability, but maintainability as well.
Before
-- 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 migrated from view.mappings.list
vim.keymap.set("n", "l", api.node.open.edit, opts "Open")
vim.keymap.set("n", "<CR>", api.node.open.edit, opts "Open")
vim.keymap.set("n", "o", api.node.open.edit, opts "Open")
vim.keymap.set("n", "h", api.node.navigate.parent_close, opts "Close Directory")
vim.keymap.set("n", "v", api.node.open.vertical, opts "Open: Vertical Split")
vim.keymap.set("n", "C", api.tree.change_root_to_node, opts "CD")
Refactor
local mappings = {
["<C-]>"] = { api.tree.change_root_to_node, "CD" },
["<C-e>"] = { api.node.open.replace_tree_buffer, "Open: In Place" },
["<C-k>"] = { api.node.show_info_popup, "Info" },
["<C-r>"] = { api.fs.rename_sub, "Rename: Omit Filename" },
["<C-t>"] = { api.node.open.tab, "Open: New Tab" },
["<C-v>"] = { api.node.open.vertical, "Open: Vertical Split" },
["<C-x>"] = { api.node.open.horizontal, "Open: Horizontal Split" },
["<BS>"] = { api.node.navigate.parent_close, "Close Directory" },
["<CR>"] = { api.node.open.edit, "Open" },
["<Tab>"] = { api.node.open.preview, "Open Preview" },
[">"] = { api.node.navigate.sibling.next, "Next Sibling" },
["<"] = { api.node.navigate.sibling.prev, "Previous Sibling" },
["."] = { api.node.run.cmd, "Run Command" },
["-"] = { api.tree.change_root_to_parent, "Up" },
["a"] = { api.fs.create, "Create" },
["bmv"] = { api.marks.bulk.move, "Move Bookmarked" },
["B"] = { api.tree.toggle_no_buffer_filter, "Toggle No Buffer" },
["c"] = { api.fs.copy.node, "Copy" },
["C"] = { api.tree.toggle_git_clean_filter, "Toggle Git Clean" },
["[c"] = { api.node.navigate.git.prev, "Prev Git" },
["]c"] = { api.node.navigate.git.next, "Next Git" },
["d"] = { api.fs.remove, "Delete" },
["D"] = { api.fs.trash, "Trash" },
["E"] = { api.tree.expand_all, "Expand All" },
["e"] = { api.fs.rename_basename, "Rename: Basename" },
["]e"] = { api.node.navigate.diagnostics.next, "Next Diagnostic" },
["[e"] = { api.node.navigate.diagnostics.prev, "Prev Diagnostic" },
["F"] = { api.live_filter.clear, "Clean Filter" },
["f"] = { api.live_filter.start, "Filter" },
["g?"] = { api.tree.toggle_help, "Help" },
["gy"] = { api.fs.copy.absolute_path, "Copy Absolute Path" },
["H"] = { api.tree.toggle_hidden_filter, "Toggle Dotfiles" },
["I"] = { api.tree.toggle_gitignore_filter, "Toggle Git Ignore" },
["J"] = { api.node.navigate.sibling.last, "Last Sibling" },
["K"] = { api.node.navigate.sibling.first, "First Sibling" },
["m"] = { api.marks.toggle, "Toggle Bookmark" },
["o"] = { api.node.open.edit, "Open" },
["O"] = { api.node.open.no_window_picker, "Open: No Window Picker" },
["p"] = { api.fs.paste, "Paste" },
["P"] = { api.node.navigate.parent, "Parent Directory" },
["q"] = { api.tree.close, "Close" },
["r"] = { api.fs.rename, "Rename" },
["R"] = { api.tree.reload, "Refresh" },
["s"] = { api.node.run.system, "Run System" },
["S"] = { api.tree.search_node, "Search" },
["U"] = { api.tree.toggle_custom_filter, "Toggle Hidden" },
["W"] = { api.tree.collapse_all, "Collapse" },
["x"] = { api.fs.cut, "Cut" },
["y"] = { api.fs.copy.filename, "Copy Name" },
["Y"] = { api.fs.copy.relative_path, "Copy Relative Path" },
["<2-LeftMouse>"] = { api.node.open.edit, "Open" },
["<2-RightMouse>"] = { api.tree.change_root_to_node, "CD" },
-- Mappings migrated from view.mappings.list
["l"] = { api.node.open.edit, "Open" },
["<CR>"] = { api.node.open.edit, "Open" },
["o"] = { api.node.open.edit, "Open" },
["h"] = { api.node.navigate.parent_close, "Close Directory" },
["v"] = { api.node.open.vertical, "Open: Vertical Split" },
["C"] = { api.tree.change_root_to_node, "CD" },
}
for keys, mapping in pairs(mappings) do
vim.keymap.set("n", keys, mapping[1], opts(mapping[2]))
end
It is a simple, yet good solution for long lines of code.
Reactions are currently unavailable
Activity
alex-courtis commentedon May 24, 2023
The generation command is temporary and will be removed once all users have migrated.
The documented on_attach is low level and very explicit for clarity and complete freedom. The opacity of
view.mappings.listwas problematic and one reason for the change.Your mapping loop is quite nice, but the definitions are not much shorter than the recommended... I'd be most grateful if you posted this as a Recipe