# A File Explorer For Neovim Written In Lua ## Notice This plugin doesn't support windows. \ This plugin requires [neovim nightly](https://github.com/neovim/neovim/wiki/Installing-Neovim). \ You can switch to commit `afc86a9` if you use neovim 0.4.x. \ Note that the old version has less features and is much slower than the new one. ## Install Install with [vim-plug](https://github.com/junegunn/vim-plug): ```vim " master (neovim git) Plug 'kyazdani42/nvim-web-devicons' " for file icons Plug 'kyazdani42/nvim-tree.lua' " old version that runs on neovim 0.4.x Plug 'kyazdani42/nvim-tree.lua' { 'commit': 'afc86a9' } " for icons in old version Plug 'ryanoasis/vim-devicons' ``` ## Setup ```vim let g:lua_tree_side = 'right' | 'left' "left by default let g:lua_tree_size = 40 "30 by default let g:lua_tree_ignore = [ '.git', 'node_modules', '.cache' ] "empty by default let g:lua_tree_auto_open = 1 "0 by default, opens the tree when typing `vim $DIR` or `vim` let g:lua_tree_auto_close = 1 "0 by default, closes the tree when it's the last window let g:lua_tree_follow = 1 "0 by default, this option allows the cursor to be updated when entering a buffer let g:lua_tree_indent_markers = 1 "0 by default, this option shows indent markers when folders are open let g:lua_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:lua_tree_bindings = { \ 'edit': '', \ 'edit_vsplit': '', \ 'edit_split': '', \ 'edit_tab': '', \ 'toggle_ignored': 'I', \ 'preview': '', \ 'cd': '', \ 'create': 'a', \ 'remove': 'd', \ 'rename': 'r', \ 'cut': 'x', \ 'copy': 'c', \ 'paste': 'p', \ 'prev_git_item': '[c', \ 'next_git_item': ']c', } " Disable default mappings by plugin " Bindings are enable by default, disabled on any non-zero value " let lua_tree_disable_keybindings=1 " default will show icon by default if no icon is provided " default shows no icon by default let g:lua_tree_icons = { \ 'default': '', \ 'git': { \ 'unstaged': "✗", \ 'staged': "✓", \ 'unmerged': "═", \ 'renamed': "➜", \ 'untracked': "★" \ }, \ 'folder': { \ 'default': "", \ 'open': "" \ } \ } nnoremap :LuaTreeToggle nnoremap r :LuaTreeRefresh nnoremap n :LuaTreeFindFile " LuaTreeOpen and LuaTreeClose 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 lua_tree_highlight` highlight LuaTreeFolderIcon guibg=blue ``` ## KeyBindings - move around like in any vim buffer - `` on `..` will cd in the above directory - `` will cd in the directory under the cursor - type `a` to 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 `r` to rename a file - type `x` to add/remove file/directory to cut clipboard - type `c` to add/remove file/directory to copy clipboard - type `p` to paste from clipboard. Cut clipboard has precedence over copy (will prompt for confirmation) - type `d` to delete a file (will prompt for confirmation) - type `]c` to go to next git item - type `[c` to go to prev git item - if the file is a directory, `` will open the directory otherwise it will open the file in the buffer near the tree - if the file is a symlink, `` will follow the symlink (if the target is a file) - `` will open the file in a vertical split - `` will open the file in a horizontal split - `` will open the file in a new tab - `` will open the file as a preview (keeps the cursor in the tree) - `I` will toggle visibility of folders hidden via |g:lua_tree_ignore| - `gx` opens the file with the `open` command on MACOS and `xdg-open` in linux - Double left click acts like `` - Double right click acts like `` ## 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. The Netrw vim plugin is disabled, hence features like `gx` don't work accross your windows/buffers. You could use a plugin like [this one](https://github.com/stsewd/gx-extended.vim) if you wish to use that feature. ## Features - Open file in current buffer or in split with FzF like bindings (``, ``, ``, ``) - File icons with nvim-web-devicons - Syntax highlighting ([exa](https://github.com/ogham/exa) like) - Change directory with `.` - Add / Rename / delete files - Git integration - Indent markers - Mouse support - It's fast ## Screenshots ![alt text](.github/screenshot.png?raw=true "kyazdani42 tree") ![alt text](.github/screenshot2.png?raw=true "akin909 tree")