A file explorer tree for neovim written in lua
- add <C-r> binding to omit the filename on rename (option is full_rename). - call `silent! write!` on rename to avoid the `overwrite existing file` error when saving the buffer. |
||
|---|---|---|
| .github | ||
| doc | ||
| lua | ||
| plugin | ||
| .DS_Store | ||
| .luacheckrc | ||
| LICENSE | ||
| README.md | ||
A File Explorer For Neovim Written In Lua
Notice
This plugin doesn't support windows yet.
This plugin requires neovim nightly.
Install
Install with vim-plug:
" requires
Plug 'kyazdani42/nvim-web-devicons' " for file icons
Plug 'kyazdani42/nvim-tree.lua'
Setup
let g:nvim_tree_side = 'right' | 'left' "left by default
let g:nvim_tree_width = 40 "30 by default
let g:nvim_tree_ignore = [ '.git', 'node_modules', '.cache' ] "empty by default
let g:nvim_tree_auto_open = 1 "0 by default, opens the tree when typing `vim $DIR` or `vim`
let g:nvim_tree_auto_close = 1 "0 by default, closes the tree when it's the last window
let g:nvim_tree_auto_ignore_ft = {'startify', 'dashboard'} "empty by default, don't auto open tree on specific filetypes.
let g:nvim_tree_quit_on_open = 1 "0 by default, closes the tree when you open a file
let g:nvim_tree_follow = 1 "0 by default, this option allows the cursor to be updated when entering a buffer
let g:nvim_tree_indent_markers = 1 "0 by default, this option shows indent markers when folders are open
let g:nvim_tree_hide_dotfiles = 1 "0 by default, this option hides files and folders starting with a dot `.`
let g:nvim_tree_git_hl = 1 "0 by default, will enable file highlight for git attributes (can be used without the icons).
let g:nvim_tree_root_folder_modifier = ':~' "This is the default. See :help filename-modifiers for more options
let g:nvim_tree_tab_open = 1 "0 by default, will open the tree when entering a new tab and the tree was previously open
let g:nvim_tree_width_allow_resize = 1 "0 by default, will not resize the tree when opening a file
let g:nvim_tree_disable_netrw = 0 "1 by default, disables netrw
let g:nvim_tree_hijack_netrw = 0 "1 by default, prevents netrw from automatically opening when opening directories (but lets you keep its other utilities)
let g:nvim_tree_show_icons = {
\ 'git': 1,
\ 'folders': 0,
\ 'files': 0,
\ }
"If 0, do not show the icons for one of 'git' 'folder' and 'files'
"1 by default, notice that if 'files' is 1, it will only display
"if nvim-web-devicons is installed and on your runtimepath
" You can edit keybindings be defining this variable
" You don't have to define all keys.
" NOTE: the 'edit' key will wrap/unwrap a folder and open a file
let g:nvim_tree_bindings = {
\ 'edit': ['<CR>', 'o'],
\ 'edit_vsplit': '<C-v>',
\ 'edit_split': '<C-x>',
\ 'edit_tab': '<C-t>',
\ 'close_node': ['<S-CR>', '<BS>'],
\ 'toggle_ignored': 'I',
\ 'toggle_dotfiles': 'H',
\ 'refresh': 'R',
\ 'preview': '<Tab>',
\ 'cd': '<C-]>',
\ 'create': 'a',
\ 'remove': 'd',
\ 'rename': 'r',
\ 'full_rename': '<C-r>',
\ 'cut': 'x',
\ 'copy': 'c',
\ 'paste': 'p',
\ 'prev_git_item': '[c',
\ 'next_git_item': ']c',
\ 'dir_up': '-',
\ 'close': 'q',
\ }
" Disable default mappings by plugin
" Bindings are enable by default, disabled on any non-zero value
" let nvim_tree_disable_keybindings=1
" default will show icon by default if no icon is provided
" default shows no icon by default
let g:nvim_tree_icons = {
\ 'default': '',
\ 'symlink': '',
\ 'git': {
\ 'unstaged': "✗",
\ 'staged': "✓",
\ 'unmerged': "",
\ 'renamed': "➜",
\ 'untracked': "★"
\ },
\ 'folder': {
\ 'default': "",
\ 'open': "",
\ empty = "",
\ empty_open = "",
\ 'symlink': "",
\ }
\ }
nnoremap <C-n> :NvimTreeToggle<CR>
nnoremap <leader>r :NvimTreeRefresh<CR>
nnoremap <leader>n :NvimTreeFindFile<CR>
" NvimTreeOpen and NvimTreeClose are also available if you need them
set termguicolors " this variable must be enabled for colors to be applied properly
" a list of groups can be found at `:help nvim_tree_highlight`
highlight NvimTreeFolderIcon guibg=blue
KeyBindings
- move around like in any vim buffer
<CR>on..will cd in the above directory<C-]>will cd in the directory under the cursor<BS>will close current opened directory or parent- type
ato add a file. Adding a directory requires leaving a leading/at the end of the path.you can add multiple directories by doing foo/bar/baz/f and it will add foo bar and baz directories and f as a file
- type
rto rename a file - type
<C-r>to rename a file and omit the filename on input - type
xto add/remove file/directory to cut clipboard - type
cto add/remove file/directory to copy clipboard - type
pto paste from clipboard. Cut clipboard has precedence over copy (will prompt for confirmation) - type
dto delete a file (will prompt for confirmation) - type
]cto go to next git item - type
[cto go to prev git item - type '-' to naviate up to the parent directory of the current file/directory
- if the file is a directory,
<CR>will open the directory otherwise it will open the file in the buffer near the tree - if the file is a symlink,
<CR>will follow the symlink (if the target is a file) <C-v>will open the file in a vertical split<C-x>will open the file in a horizontal split<C-t>will open the file in a new tab<Tab>will open the file as a preview (keeps the cursor in the tree)Iwill toggle visibility of folders hidden via |g:nvim_tree_ignore|Hwill toggle visibility of dotfiles (files/folders starting with a.)Rwill refresh the tree- Double left click acts like
<CR> - Double right click acts like
<C-]>
Note
This plugin is very fast because it uses the libuv scandir and scandir_next functions instead of spawning an ls process which can get slow on large files when combining with stat to get file informations.
Features
- Open file in current buffer or in split with FzF like bindings (
<CR>,<C-v>,<C-x>,<C-t>) - File icons with nvim-web-devicons
- Syntax highlighting (exa like)
- Change directory with
. - Add / Rename / delete files
- Git integration (icons and file highlight)
- Indent markers
- Mouse support
- It's fast


