* add todo * refactor(#2886): multi instance: node class refactoring: extract links, *_git_status (#2944) * extract DirectoryLinkNode and FileLinkNode, move Node methods to children * temporarily move DirectoryNode methods into BaseNode for easier reviewing * move mostly unchanged DirectoryNode methods back to BaseNode * tidy * git.git_status_file takes an array * update git status of links * luacheck hack * safer git_status_dir * refactor(#2886): multi instance: node class refactoring: DirectoryNode:expand_or_collapse (#2957) move expand_or_collapse to DirectoryNode * refactor(#2886): multi instance: node group functions refactoring (#2959) * move last_group_node to DirectoryNode * move add BaseNode:as and more doc * revert parameter name changes * revert parameter name changes * add Class * move group methods into DN * tidy group methods * tidy group methods * tidy group methods * tidy group methods * parent is DirectoryNode * tidy expand all * BaseNode -> Node * move watcher to DirectoryNode * last_group_node is DirectoryNode only * simplify create-file * simplify parent * simplify collapse-all * simplify live-filter * style * move lib.get_cursor_position to Explorer * move lib.get_node_at_cursor to Explorer * move lib.get_nodes to Explorer * move place_cursor_on_node to Explorer * resolve resource leak in purge_all_state * move many autocommands into Explorer * post merge tidy * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * Revert "chore: resolve undefined-field" This reverts commit be546ff18d41f28466b065c857e1e041659bd2c8. * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * chore: resolve undefined-field * Revert "chore: resolve undefined-field" This reverts commit |
||
|---|---|---|
| .github | ||
| .hooks | ||
| doc | ||
| lua | ||
| scripts | ||
| .editorconfig | ||
| .gitignore | ||
| .luacheckrc | ||
| .luarc.json | ||
| .release-please-manifest.json | ||
| CHANGELOG.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| release-please-config.json | ||
A File Explorer For Neovim Written In Lua
Automatic updates
File type icons
Git integration
Diagnostics integration: LSP and COC
(Live) filtering
Cut, copy, paste, rename, delete, create
Highly customisable
Take a look at the wiki for Showcases, Tips, Recipes and more.
Questions and general support: Discussions
Requirements
nvim-web-devicons is optional and used to display file icons. It requires a patched font. Your terminal emulator must be configured to use that font, usually "Hack Nerd Font"
Install
Please install via your preferred package manager. See Installation for specific package manager instructions.
nvim-tree/nvim-tree.lua
Major or minor versions may be specified via tags: v<MAJOR> e.g. v1 or v<MAJOR>.<MINOR> e.g. v1.23
nvim-tree/nvim-web-devicons optional, for file icons
Disabling netrw is strongly advised, see :help nvim-tree-netrw
Quick Start
Setup
Setup the plugin in your init.lua
-- disable netrw at the very start of your init.lua
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
-- optionally enable 24-bit colour
vim.opt.termguicolors = true
-- empty setup using defaults
require("nvim-tree").setup()
-- OR setup with some options
require("nvim-tree").setup({
sort = {
sorter = "case_sensitive",
},
view = {
width = 30,
},
renderer = {
group_empty = true,
},
filters = {
dotfiles = true,
},
})
Help
Open the tree: :NvimTreeOpen
Show the mappings: g?
Custom Mappings
:help nvim-tree-mappings-default are applied by default however you may customise via |nvim-tree.on_attach| 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
-- default mappings
api.config.mappings.default_on_attach(bufnr)
-- custom mappings
vim.keymap.set('n', '<C-t>', api.tree.change_root_to_parent, opts('Up'))
vim.keymap.set('n', '?', api.tree.toggle_help, opts('Help'))
end
-- pass to setup along with your other options
require("nvim-tree").setup {
---
on_attach = my_on_attach,
---
}
Highlight
Run :NvimTreeHiTest to show all the highlights that nvim-tree uses.
They can be customised before or after setup is called and will be immediately applied at runtime. e.g.
vim.cmd([[
:hi NvimTreeExecFile guifg=#ffa0a0
:hi NvimTreeSpecialFile guifg=#ff80ff gui=underline
:hi NvimTreeSymlink guifg=Yellow gui=italic
:hi link NvimTreeImageFile Title
]])
See :help nvim-tree-highlight for details.
Commands
Basic commands:
:NvimTreeToggle Open or close the tree. Takes an optional path argument.
:NvimTreeFocus Open the tree if it is closed, and then focus on the tree.
:NvimTreeFindFile Move the cursor in the tree for the current buffer, opening folders if needed.
:NvimTreeCollapse Collapses the nvim-tree recursively.
Roadmap
nvim-tree is stable and new major features will not be added. The focus is on existing user experience.
Users are encouraged to add their own custom features via the public API.
Development is focused on:
- Bug fixes
- Performance
- Quality of Life improvements
- API / Events
- Enhancements to existing features
API
nvim-tree exposes a public API. This is non breaking, with additions made as necessary. See :help nvim-tree-api
See wiki Recipes and Tips for ideas and inspiration.
Please raise a feature request if the API is insufficient for your needs. Contributions are always welcome.
You may also subscribe to events that nvim-tree will dispatch in a variety of situations, see :help nvim-tree-events
Contributing
PRs are always welcome. See wiki to get started.
See bug and PR Please issues if you are looking for some work to get you started.
Screenshots
See Showcases wiki page for examples of user's configurations with sources.
Please add your own!
Team
- @alex-courtis Arch Linux
- @gegoune macOS
- @Akmadan23 Linux
- @dependabot[bot] Ubuntu Linux