这里会列举常用的一些 NeoVIM 插件。
基础插件
图标
很多的插件为了美观会采用图标显示,可以使用 nvim-web-devicons 这个插件,依赖 NerdFont 字体扩展。
在 www.nerdfonts.com 中包含的符号,作为常用字体的补充,可以从 Font Downloads 页面选择合适的字体 (例如 Hack),然后下载并保存到 /usr/share/fonts
或者 ~/.local/share/fonts
目录下,执行如下命令。
$ fc-cache -f -v
$ fc-list | grep "FiraMono"
建议使用 FiraMono
字体,相比来说要跟全面一些。另外,还可以对字体的加载进行优化,这里不做过多介绍。然后,在终端 (如 Gnome Terminal) 中选择对应的字体即可。
在 nvim 中可以通过 lua print(vim.inspect(require'nvim-web-devicons'.get_icons()))
命令查看当前加载的字体。
配色
VIM 提供了一整套的配色方法,可以自己配置,但通常是使用一些常用的方案,这里使用 gruvbox 主题,更多的可以参考 Awesome VIM Colorschemes
文件浏览 nvim-tree
通常使用 nvim-tree.lua 作为文件浏览器,可以执行常见的操作,而且操作快捷键跟 VIM 的常用按键相似,可以通过 <leader>tt
快捷键打开,如下是常用快捷键:
o 打开关闭文件夹
a 创建文件
r 重命名
x 剪切
c 拷贝
p 粘贴
d 删除
g? 查看帮助文档
Ctrl-k 查看文件属性信息
搜索 telescope
插件 telescope.nvim 是一个王炸级别的查找插件,除了内置的功能之外,还提供了极高的扩展性,简单来说,一个搜索分成了三部分:A) 查找 Picker;B) 排序 Sorter;C) 展示 Previewer。
其中 Picker 决定了其支持查找的范围,内部已经支持绝大多数,包括了 Vim 内部的缓存、Tags、寄存器等等,其它的如文件、LSP、Git、Treesitter 等等。
可以对搜索的命令行进行定制。
require('telescope.builtin').find_files({find_command = {'rg', '--files'})
如下是依赖的一些常用插件。
rg
ripgrep 是一个基于行的搜索工具,当满足匹配规则时会打印该行,类似于 The Sliver Search、awk 等工具,而且遵循 gitignore
规则,其中的 live_grep
grep_string
都依赖该命令行。
The Silver Search 也被称为
ag
, 这是一个全文检索工具,可以替换 grep 以及 ack 类似的工具,非常适合查询大量文本文件,尤其是源代码的场景,不过也有段时间没有更新了,官方将其描述如下。The Silver Searcher is a tool for searching code. It started off as a clone of Ack, but their feature sets have since diverged slightly. In typical usage, Ag is 5-10x faster than Ack.
直接从 ripgre 下载二进制文件即可,解压后将二进制文件 rg
复制到 PATH
目录下,最好将补齐文件也保存到 /etc/bash_completion.d
目录下,而文档保存在 /usr/share/man/man1
目录下,用作命令行使用。
详细中文文档可以从 GitHub 查看,因为该工具是用 Rust 语言开发的,其正则表达式语法可以参考 Rust Regex Syntax 中的介绍,如下是简单的示例。
fd
fd 类似于 find
用来快速查找文件,支持并发搜索以及 glob 语法,其内部支持文件搜索,不过仍建议使用该命令,可以通过如下命令安装。
----- 对于Debain,注意,这里的名字是fdfind,看看是否冲突可以通过软链接设置
# apt-get install fd-find
# cd /usr/bin && ln -s fdfind fd
fzf
这是一款使用 Go 语言编写的交互式的 Unix 命令行工具,可以用来查找文件、历史命令、本机主机名、进程、Git 分支等,所有的命令行工具可以将输出通过管道再利用 fzf 进行搜索,不过有个 fzf-native
的动态库适配版本。
其它
which-key.nvim
插件 folke/which-key.nvim 可以根据输入自动提示可用的命令,通过 vim.o.timeout=true
和 vim.o.timeoutlen=300
设置超时时间,此时会自动提示,另外,还可以通过 Ctrl-W
查看。
还可以通过如下方式注册快捷键。
local wk = require("which-key")
wk.register(mappings, opts)
当前的按键映射可以通过 :map
命令查看,而默认的可以查看文档,也就是 :help index
命令。
其它插件
- nvim-lua/plenary.nvim 基于 Nvim 函数的封装实现,很多三方库基于此实现,例如
telescope
、neogit
等。 - nvim-lualine/lualine.nvim 状态栏显示。
- windwp/nvim-autopairs 自动补齐括号。
- j-hui/fidget.nvim 用于显示 LSP 进度。
- akinsho/bufferline.nvim 用来管理 Buffer 。