All Projects → kyazdani42 → Nvim Tree.lua

kyazdani42 / Nvim Tree.lua

Licence: other
A file explorer tree for neovim written in lua

Programming Languages

lua
6591 projects

Projects that are alternatives of or similar to Nvim Tree.lua

Ranger.vim
Ranger integration in vim and neovim
Stars: ✭ 510 (+33.16%)
Mutual labels:  neovim, file-explorer
Tree.nvim
Neovim file-explorer powered by C++
Stars: ✭ 140 (-63.45%)
Mutual labels:  neovim, file-explorer
Fern.vim
🌿 General purpose asynchronous tree viewer written in Pure Vim script
Stars: ✭ 552 (+44.13%)
Mutual labels:  neovim, file-explorer
Vim Netranger
A ranger-like system/cloud storage explorer for Vim, bringing together the best of Vim, ranger, and rclone.
Stars: ✭ 170 (-55.61%)
Mutual labels:  neovim, file-explorer
Chadtree
File manager for Neovim. Better than NERDTree.
Stars: ✭ 653 (+70.5%)
Mutual labels:  neovim, file-explorer
drex.nvim
Another directory/file explorer for Neovim written in Lua
Stars: ✭ 15 (-96.08%)
Mutual labels:  neovim, file-explorer
Vim Dadbod Ui
Simple UI for https://github.com/tpope/vim-dadbod
Stars: ✭ 315 (-17.75%)
Mutual labels:  neovim
Night Owl.vim
A 24bit dark Vim colorscheme based on sdras/night-owl-vscode-theme
Stars: ✭ 349 (-8.88%)
Mutual labels:  neovim
Tailwindcss Classnames
TypeScript support for TailwindCSS
Stars: ✭ 305 (-20.37%)
Mutual labels:  neovim
Chromatica.nvim
Clang based syntax highlighting for Neovim
Stars: ✭ 306 (-20.1%)
Mutual labels:  neovim
Lens.vim
A Vim Automatic Window Resizing Plugin
Stars: ✭ 381 (-0.52%)
Mutual labels:  neovim
Barbar.nvim
A neovim tabline plugin.
Stars: ✭ 359 (-6.27%)
Mutual labels:  neovim
Nvim Gdb
Neovim thin wrapper for GDB, LLDB, PDB/PDB++ and BashDB
Stars: ✭ 341 (-10.97%)
Mutual labels:  neovim
Chonky
😸 A File Browser component for React.
Stars: ✭ 313 (-18.28%)
Mutual labels:  file-explorer
Vim Delve
Neovim / Vim integration for Delve
Stars: ✭ 355 (-7.31%)
Mutual labels:  neovim
Vim
An ambitious theme for vim
Stars: ✭ 313 (-18.28%)
Mutual labels:  neovim
Dotfiles
Configuration for Linux, Nix, i3, Kitty, Fish, Neovim and more
Stars: ✭ 379 (-1.04%)
Mutual labels:  neovim
Vimpyter
Edit your Jupyter notebooks in Vim/Neovim
Stars: ✭ 308 (-19.58%)
Mutual labels:  neovim
Neosolarized
NeoSolarized: A fixed solarized colorscheme for better truecolor support.
Stars: ✭ 333 (-13.05%)
Mutual labels:  neovim
Mydotfiles
All my dot configuration files.
Stars: ✭ 359 (-6.27%)
Mutual labels:  neovim

A File Explorer For Neovim Written In Lua

Notice

This plugin requires neovim nightly (>=0.5.0).

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_add_trailing = 1 "0 by default, append a trailing slash to folder names
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

" 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

Default actions

  • move around like in any vim buffer
  • <CR> or o 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 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 <C-r> to rename a file and omit the filename on input
  • 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
  • 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)
  • I will toggle visibility of folders hidden via |g:nvim_tree_ignore|
  • H will toggle visibility of dotfiles (files/folders starting with a .)
  • R will refresh the tree
  • Double left click acts like <CR>
  • Double right click acts like <C-]>

Setup

You can disable default mappings with

" let nvim_tree_disable_keybindings=1

But you won't be able to map any keys from the setup with nvim_tree_bindings. Use with caution.

Default keybindings can be overriden. You can also define your own keymappings for the tree view:

lua <<EOF
    local tree_cb = require'nvim-tree.config'.nvim_tree_callback
    vim.g.nvim_tree_bindings = {
      ["<CR>"] = ":YourVimFunction()<cr>",
      ["u"] = ":lua require'some_module'.some_function()<cr>",

      -- default mappings
      ["<CR>"]           = tree_cb("edit"),
      ["o"]              = tree_cb("edit"),
      ["<2-LeftMouse>"]  = tree_cb("edit"),
      ["<2-RightMouse>"] = tree_cb("cd"),
      ["<C-]>"]          = tree_cb("cd"),
      ["<C-v>"]          = tree_cb("vsplit"),
      ["<C-x>"]          = tree_cb("split"),
      ["<C-t>"]          = tree_cb("tabnew"),
      ["<BS>"]           = tree_cb("close_node"),
      ["<S-CR>"]         = tree_cb("close_node"),
      ["<Tab>"]          = tree_cb("preview"),
      ["I"]              = tree_cb("toggle_ignored"),
      ["H"]              = tree_cb("toggle_dotfiles"),
      ["R"]              = tree_cb("refresh"),
      ["a"]              = tree_cb("create"),
      ["d"]              = tree_cb("remove"),
      ["r"]              = tree_cb("rename"),
      ["<C-r>"]          = tree_cb("full_rename"),
      ["x"]              = tree_cb("cut"),
      ["c"]              = tree_cb("copy"),
      ["p"]              = tree_cb("paste"),
      ["[c"]             = tree_cb("prev_git_item"),
      ["]c"]             = tree_cb("next_git_item"),
      ["-"]              = tree_cb("dir_up"),
      ["q"]              = tree_cb("close"),
    }
EOF

All mappings are set in normal mode.

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

Screenshots

alt text alt text alt text

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].