Migrate from NerdTree to NvimTree
ę¶åI have used NerdTree as file explorer for years. It is simple, but works. Even after I migrated to NeoVim, I still choose NerdTree to explore and manage file. However, after I upgraded my NeoVim to version 0.8, the NerdTree seems has some bugs under NeoVim. I think it is time to find some modern alternative.
Before the new finding journey, I need to highlight features I mostly used under NerdTree.
Firstly, I like it's compact UI. Just set g:NERDTreeMinimalUI
to 1
, and NerdTree only display a file/folder list.
NerdTree's features
~/.config/nvim/..
āµ autoload
āµ ftplugin
ā· lua
lv.lua
ā· pack/vendor/start
āµ tender
āµ tree
āµ vimagit
LICENSE
README.md
init.vim
vim.lua
NerdTree will display a āµ before folder. And you move to some folder and press Enter
, the folder will be open and the āµ will become ā·. It so natural. When the folder contains only one folder, NerdTree will open it recursively and merge folders into one line, which is the killer feature I like most. Pressing Enter
on file will open it.
If I want to remove, rename or delete some file or folder, I just press m
, and NerdTree will pop up a dialog to let me enter the new name or to confirm the action. It is natural as well.
The last feature I used is :NvimTreeFindFile
. It will toggle the explorer panel and auto focus to the current file.
I wish the new plugin will have all the features I mentioned.
Hello NvimTree
As I have migrated to NeoVim, it is natural to choose a lua based plugin. And I found the NvimTree.
NvimTree is a more powerful file manager. But it more complicate than NerdTree. When first saw it's configuration, I can't help giving up to read themšIt has so many options to setup!
However, the NerdTree's author seems not to maintain it any more, I have no choice but force myself to understand the setup snippets.
The installation is simple, and just clone NerdTree into pack/*/start
:
git clone https://github.com/nvim-tree/nvim-tree.lua.git pack/vendor/start/tree
Then put the following snippet into your init.vim:
.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
vim.opt.termguicolors = true
vim
require("nvim-tree").setup()
Reopen NeoVim and run :NvimTreeToggle
will toggle the explorer side panel. And NeoVim also have a :NvimTreeFindFile
command to open panel and focus to the path of the current file.
I setup two key map for NvimTree:
nnoremap <silent> <leader>e :NvimTreeToggle<cr>
nnoremap <silent> <leader>f :NvimTreeFindFile<cr>
It works, but the default configuration does not favorite my personal taste. So I need some adjustments.
NvimTree customization
Firstly, NvimTree depends some patched font to display icon. I intend to use plain text UI, so all the non-unicode symbol should be hidden.
There are four kinds of icon will be displayed: git, file, folder, and folder_arrow. And I only need icons of git and folder_arrow.
I use āµ and ā· for the closed and open arrow, and use ā„ for the status of git unmerged. All other icon of git status are unicodes. So my configuration for icons is like this:
require("nvim-tree").setup({
= {
renderer = {
icons = {
show = true,
git = false,
file = false,
folder = true,
folder_arrow },
= {
glyphs = {
folder = "āµ",
arrow_closed = "ā·",
arrow_open },
= {
git = "ā",
unstaged = "ā",
staged = "ā„",
unmerged = "ā",
renamed = "ā
",
untracked = "ā",
deleted = "ā",
ignored },
},
},
},
})
NvimTree does not group empty path under the default setup. So we need to set the renderer.group_empty
to true
.
NvimTree has a killing feature, which is auto change panel width according the length of path. And I like it very much. However, it is not enabled in default. We need open the view.adaptive_size
flag. The default width is 30% of the window size, which I think is a little wider. So I change it to 20%.
NvimTree supports opening file by the default application of system. So you can press s
and it will let the operating system open the file. But you need to setup the system_open
flag in advance. I use mac, so my configuration is:
require("nvim-tree").setup({
= {
renderer = {
system_open = "open",
cmd },
},
})
I also open the hijack_cursor
flag and set the sort_by
to "case_sensitive"
, please see the help doc to find their functions.
If you want to create, rename, or delete file in NvimTree, you should press a
, r
, and d
accordingly. It is a litter tough to get used to new habitš
Conclusion
All in all, NvimTree is a good replacement for NerdTree. It has more features, and the project is more active. I think every user of NerdTree shoud consider repace NerdTree with NvimTree.
All the lua configuration can be found in GitHub.