从 NERDTree 切换到 nvim-tree
0x0 NERDTree 的问题
使用 neovim 时,有时会遇到在启动过程中长时间卡住的问题。通过 vi --startuptime /tmp/1
这样的调试方式启动,发现多数时间开销在 NERDTree 插件里。
考虑到 NERDTree 项目 目前已经不再是活跃开发状态,所以结合网上搜索到的信息,经过比较后,决定切换到 nvim-tree.lua 插件。
0x1 切换过程
以下是切换过程中的一些记录。
按照文档说明,在配置文件 init.lua 的开始位置,先禁用 netrw:
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
下载并安装 Nerd Font 字体,比如 DejaVuSansM Nerd Font。
之后,按照文档配默认置即可。
之前一直通过 <leader>n
来打开 NERDTree,现在要修改:
vim.api.nvim_set_keymap("n", "<leader>n", ":NvimTreeToggle<CR>", {})
这样设置后,就可以使用了。
0x2 微调
1. 文件夹的图标
对于文件夹,nvim-web-devicons 里有专门的图标。考虑到已经习惯了 NERDTree 里使用的箭头图标,所以进行了调整:
require("nvim-tree").setup({
renderer = {
icons = {
glyphs = {
folder = {
arrow_closed = "⏵",
arrow_open = "⏷",
},
},
},
},
})
2. 按键
在学习 nvim-tree.lua 按键操作的过程中,发现有几处跟原先 NERDTree 不一致的地方。
之前 NERDTree 的按键,多数与 vim 保持一致,比如 H 是移动到窗口起始行,M 是移动到中间,L 是移动到底部,C-e 是整体向上移动,C-y 向下等等。
nvim-tree 把这些重新定义了,比如 H 是打开或关闭隐藏文件的显示,M 是切换显示标记的文件,C-e 是原地打开当前选中文件,等等。考虑到目前这些功能并不是最常用,所以重新分配了按键:
on_attach = function(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
api.config.mappings.default_on_attach(bufnr)
vim.keymap.set("n", "H", "H", opts("To line [count] from top (Home) of window"))
vim.keymap.set("n", "M", "M", opts("To Middle line of window"))
vim.keymap.set("n", "L", "L", opts("To line [count] from bottom of window"))
vim.keymap.set("n", "<C-e>", "<C-e>", opts("Scroll window [count] lines downwards"))
vim.keymap.set("n", "<C-h>", api.tree.toggle_hidden_filter, opts("Toggle Filter: Dotfiles"))
vim.keymap.set("n", "<C-t>", api.tree.toggle_no_bookmark_filter, opts("Toggle Filter: No Bookmark"))
end,
这样就恢复到了跟以前相同的操作习惯,并把几个新的功能分配到了其他按键上。
另外,nvim-tree 按键较多,对于不是那么常用的功能,也不需要额外记忆,使用时通过 g?
来查看即可。