NVIM 使用笔记
nvim 安装
在Linux系统中默认都没有安装nvim,需要自行安装,官方的包管理器中的版本都太老了,最新的版本是0.11.x,最新版的 Glibc 要求很高,Ubuntu 20 都已经无法满足了。
由于 nvim 插件对版本都很敏感,不同插件的版本之间可能会有很多问题,尽量都使用最新版。
从 nvim 仓库 获取最新版的预编译的压缩包 nvim-linux-x86_64.tar.gz,直接解压到本地就可以使用,无须执行任何额外命令。
有两种配置方式:
- 第一种方式是将对应的路径加到 PATH 中,保持 nvim 的目录独立性;
1 | export PATH="$PATH:$HOME/opt/nvim-linux-x86_64/bin" |
- 第二种方式是将解压后的子文件夹(包括
bin/,lib/等)与/usr/local/或~/.local/位置下的对应子文件夹合并。
1 | cp -R * ~/.local/ |
目前的做法是将其安装到 ~/opt,并把对应的路径添加到 PATH。
安装之后检查一下即可
1 | which nvim |
当前 nvim 版本信息
1 | NVIM v0.11.5 |
nvim 配置目录
nvim 完全遵循XDG规范,使用的目录和配置文件主要包括:
~/.config/nvim/:配置文件目录~/.config/nvim/init.lua:核心启动文件,主要用来引导加载其它配置文件。~/.config/nvim/lua/:约定的配置文件目录,其中包括所有的配置文件,对于其中的子目录也可以继续提供init.lua。
~/.local/share/nvim持久数据文件,包括插件,丢失后需要重新安装插件或下载~/.local/state/nvim短期运行状态数据,丢失后会丢失 session、undo、历史记录~/.cache/nvim:缓存数据,用于加速程序的运行,丢失后 Neovim 会重新生成,不影响功能
nvim 配置文件目录通常形如
1 | nvim |
对配置文件的修改通常需要重启 nvim 才会生效。
nvim API
vim.opt现代接口(代替旧的vim.o,vim.wo,vim.bo)vim.keymap.set(代替旧的vim.api.nvim_set_keymap)vim.api.nvim_create_*高级API,细颗粒度控制vim.g设置全局变量(唯一方式)vim.fn调用 vimscript 函数vim.cmd执行 vimscript 命令
LazyVim 配置
LazyVim 是一套开箱即用的 nvim 配置方案,基于 lazy.vim 进行插件管理。
使用方式如下:
- 备份当前的 nvim 配置
1 | mv ~/.config/nvim ~/.config/nvim.bak |
- 克隆 LazyVim starter 仓库,并将其改为自己的独立仓库
1 | git clone https://github.com/LazyVim/starter ~/.config/nvim |
报警告需要 luarocks,直接 apt 安装。
报警告需要 fdfind,直接 apt 安装。(注意包是fd-find,有的教程建议给它设置别名 fd 便于使用,但是其实不设置也可以)
tree-sitter 的下载需要 Mason 管理。
在远程服务器可能额外警告没有clipboard,不用管。
LazyVim 基础操作
快速退出nvim:<leader>qq
nvim 多个buffer之间切换:<shift+h>和<shift+l> 即H和L
对于buffer的相关操作:<leader>b
nvim 打开/关闭文件浏览器:<leader>e 或者 <leader>E,两者打开的位置不一样,e可能自动根据git判定项目根路径。
nvim 在文件管理器中:回车可以打开或关闭文件夹。a可以创建文件或文件夹(要求/结尾)
nvim 在文件管理器和主页面之间切换:ctrl+hjkl,(其实就是在windows之间切换)
<shift+h> 切换是否展示hidden文件;<shift+i> 切换是否展示gitignore忽略的文件
LazyVim 配置记录
记录一下目前基于 LazyVim 进行的配置更改。
关闭 markdown 的语法检查(lua/config/autocmds/lua)
1 | local function augroup(name) |
在输入中文标点符号 : 时发出提示(lua/config/keymaps.lua)
1 | vim.keymap.set("n", ":", function() |
一些选项修改(lua/config/options.lua)
1 | local opt = vim.opt |
其中 opt.conceallevel = 0 是为了避免 markdown 等文件自动隐藏一些字符。
阻止自动补全的文本直接出现在当前行(lua/plugins/cmp.lua)
1 | return { |
LazyVim 启用额外插件 aerial.nvim,为 markdown 文件提供目录大纲。
