本仓库是我自用的 NeoVim 配置,使用 Lua 进行配置。
本配置文件适配最新版 NeoVim,请确保其版本不低于 0.7。
为确保功能正常,请确保 Python 和 Node.js 已正确安装,然后在命令行补充以下功能:
pip install pynvim
# yay -S npm
sudo npm install -g neovim
为确保 Telescope
等插件功能正常,可通过包管理器选择性安装以下工具:
插件和 LSP 应当在首次启动时自动安装,如果未能正确安装,请确保能够正常访问 GitHub 后重新启动,或手动运行 :Lazy
后按 U
进行同步。插件安装完成后可使用 :checkhealth
检查依赖是否正常。
vimtex
配置使用 zathura 作为默认的 PDF 阅读器,可通过包管理器安装。
对于 ArchLinux,上述工具可以采用以下命令安装:
yay -S fd ripgrep xclip zathura zathura-mupdf
yay -S jre-openjdk # Neovim 的 LTeX LSP 需要 Java 环境
本配置文档的 <leader>
和 <localleader>
均设置为 空格 ,其他组合键如下,注意区分大小写。
键 | 功能 |
---|---|
光标移动 | |
j , k |
基于屏幕行的上下移动 |
gj , gk |
基于实际行的上下移动 |
J , K |
基于屏幕行向下、向上跳转 5 行 |
0 , $ |
普通模式下跳转到屏幕行的行首、行尾(可视模式下为实际行) |
保存与退出 | |
<leader>w |
保存 |
<leader>q |
退出(未保存时会报错,不会退出) |
<leader>Q |
忽略改动并退出 |
<leader>W |
保存并退出 |
搜索 | |
= |
跳转到下一个结果并使其居中于屏幕 |
- |
跳转到上一个结果并使其居中于屏幕 |
<leader><CR> |
取消搜索结果高亮 |
分屏 | |
<leader>sh |
向左新开一个分屏 |
<leader>sj |
向下新开一个分屏 |
<leader>sk |
向上新开一个分屏 |
<leader>sl |
向右新开一个分屏 |
<leader>h |
跳转到左侧分屏 |
<leader>j |
跳转到下面分屏 |
<leader>k |
跳转到上面分屏 |
<leader>l |
跳转到右侧分屏 |
<leader>H |
将当前分屏移动到最左侧 |
<leader>J |
将当前分屏移动到最底端 |
<leader>K |
将当前分屏移动到最顶端 |
<leader>L |
将当前分屏移动到最右侧 |
<c-up> |
增大分屏高度 |
<c-down> |
减小分屏高度 |
<c-right> |
增大分屏宽度 |
<c-left> |
减小分屏宽度 |
*行移动 | |
<a-j> |
把当前行下移一行 |
<a-k> |
把当前行上移一行 |
其他 | |
<leader>o |
向下插入空行 |
<leader>O |
向上插入空行 |
<leader>F |
使用 LSP 格式化代码 |
除了 lazy.nvim 插件在 init.lua
文件中自动配置外,其他的插件都在 lua/plugins/
目录下。
[lazy.nvim] 重新映射了快捷键 <leader>lz
以快速打开插件菜单。
coding.lua
的插件与编写代码的基本体验相关,主要是对 LSP 和补全系统进行配置。相关的插件和键盘映射有:
- mason.nvim:主要用于管理 LSP 的安装,可以使用
:Mason
查看已经安装的 LSP 等工具 - mason-lspconfig.nvim:主要用于配置 LPS 的自动安装
- nvim-lspconfig:提供了多数 LSP 的默认配置
- nvim-cmp:根据 LSP 和代码片段提供自动补全功能,进一步有键盘映射:
<tab>
:如果有多个补全项,向下选择<s-tab>
:如果有多个补全项,向上选择<c-j>
:如果有帮助文档,向下翻页<c-k>
:如果有帮助文档,向上翻页<c-e>
:取消补全
- LuaSnip:自定义代码片段,具体可以查看根目录
LuaSnip/
路径下的配置
editor.lua
内的插件用于给编辑器增加一些通用的功能,包括:
- fcitx.nvim:用于自动切换中英文输入法,这在使用 NeoVim 编写中文文档的时候非常有用
- renamer.nvim:基于 LSP 增强变量重命名功能,并提供了一个简单的 UI 小窗口
<F2>
:重命名当前光标下的变量
- Comment.nvim:智能注释,可以根据编程语言自动确定注释符
<c-_>
:开关行注释<a-a>
:开关块注释
- nvim-autopairs:自动补全定界符
- tabular:根据指定的符号将选定区域进行对齐
<leader>a
:触发对齐功能,输入对齐位置的符号并回车后会自动对齐
- nvim-surround:自动处理周围的定界符,采用的是该插件默认的键位映射
ys<motion><char>
:在<motion>
指定范围周围添加与<char>
匹配的定界符,例如ysiw(
会在iw
指定的当前字符周围添加由(
指定的小括号对ds<char>
:删除光标周围由<char>
指定的定界符,例如ds(
会删除光变所在位置周围最内侧的小括号对dst
:删除光标周围的 HTML 标签cs<char1><char2>
:将周围由<char1>
指定的定界符改为<char2>
对应的定界符,例如cs(<
会把光标周围最内侧的小括号对替换为尖括号对- 说明:上述命令中,如果
<char>
指定的是左定界符,命令处理后会确保内容与定界符之间保留一个空格;如果<char>
指定的是右定界符,则会确保没有空格
- gitsigns.nvim:添加 Git 功能,添加了自定义键位
<leader>gd
:查看当前位置的改动<leader>gj
:跳转到下一个改动位置<leader>gk
:跳转到上一个改动位置<leader>ga
:将光标当前位置的改动提交到暂存区<leader>gA
:将当前缓冲区的改动全部提交到暂存区<leader>gu
:撤销 “提交到暂存区” 的动作<leader>gb
:开关每行最后改动的提示<leader>gB
:查看上次提交的信息
- flash.nvim:强化的光标移动,采用了插件的推荐配置
s
:触发跳转,此时窗口会变暗,输入待跳转位置的字符,然后输入对应位置紧接的第二个字符(根据情况,周围的字符可能会临时改变),就可以跳转过去S
:窗口变暗,给出提示字符,触发范围选择f
:触发向后搜索,输入字符后会高亮显示所有匹配字符,然后重复按f
可以向下跳转,按F
可以向上跳转F
:与f
相似,只是触发向前搜索,连续按f
可以向前连续跳转,按F
可以向后跳转t
和T
:与f
和F
相似,只是向后或向前跳转到指定字符的前一个或后一个字符的位置
- undotree:采用类似 Git 的方式记录文件的临时改动
<leader>u
:打开侧边栏,显示编辑历史,可以选择、预览、回退到某个版本
writing.lua
对 Markdown 和 LaTeX 编写进行了加强,主要插件有:
- vimtex:极大提升使用 NeoVim 编辑 LaTeX 文档的体验,采用默认键位映射,常用的有:
<localleader>li
:查看当前文档信息<localleader>lt
:打开目录<localleader>ll
:编译文档<localleader>lv
:打开编译后的文档<localleader>lc
:清理编译产生的临时文件<localleader>lC
:清理所有非必要文件dse
:删除周围环境dsc
:删除周围命令ds$
:删除行内数学dsd
:删除周围定界符cse
:更改周围环境csc
:更改当前命令cs$
:更改行内数学csd
:更改周围定界符tsc
:切换带星号的命令tse
:切换带星号的环境tsd
:切换周围定界符<F7>
:为选择的文本添加命令<F8>
:为周围定界符添加\left
和\right
- vim-markdown:主要用到里面对 Markdown 文件数学环境的检查,以正确触发数学公式相关的代码片段
- [vim-markdown-toc](https://github.com/mzlogin/vim-markdown-toc):自动生成各种风格的目录,并且在编辑过程中保持更新
:GenTocGFM
:生成 GitHub Markdown 风格的目录:GenToc<type>
:其他<type>
风格包括Redcarpet
、GitLab
、Marked
- markdown-preview.nvim:在浏览器预览 Markdown 文件
<leader>mp
:开关 Markdown 预览功能
ui.lua
主要用于美化界面,多数插件没有绑定快捷键,但还是做一些简单的描述:
- nui.nvim:与 UI 相关的基础组件,其他插件的依赖项
- nvim-notify:美化的通知栏,其他插件的依赖项
- nvim-web-devicons:图标支持,其他插件的依赖项
- plenary.nvim:一些基本函数,其他插件的依赖项
- noice.nvim:主要的 UI 美化插件
- tokyonight.nvim:配色方案
- lualine.nvim:底部状态栏
- indent-blankline.nvim:缩进参考线
- nvim-colorizer.lua:直接在颜色或颜色代码底色显示对应的颜色
- marks.nvim:增强 NeoVim 的打标签功能,这里只记录常用键位
m<char>
:用<char>
标记当前行,可用于快速跳转dm<char>
:删除标签<char>
dm-
:删除当前行的标签dm<space>
:删除当前缓冲区的所有标签m]
:跳转到下一个标签位置m[
:跳转到上一个标签位置
- todo-comments.nvim:高亮注释中的 TODO、HACK、BUG 等关键字
- nvim-scrollbar:右侧的滑动条,支持鼠标拖动浏览文件
- bufferline.nvim:编辑器顶部的标签管理,自定义了一些键位:
tt
:触发跳转功能,选择标签中红色字符对因的按键即可跳转到对因缓冲区th
:跳转到左侧的缓冲区tl
:跳转到右侧的缓冲区tq
:触发关闭功能,选择标签中红色字符对因的按键即可关闭对应的缓冲区td
:退出当前的缓冲区
- nvim-treesitter:目前主要用到它的高亮功能,也是部分插件的依赖
explorer.lua
主要提供了文件交互相关的功能:
- nvim-tree.lua:侧边栏文件目录
<leader>e
:打开或关闭文件浏览侧边栏
- telescope.nvim:快速文件预览和查找,简单地映射了几个快捷键
<leader>ff
:根据文件名查找文件<leader>fg
:根据内容查找文件<leader>fb
:查找打开的缓冲区<leader>fh
:查找帮助文档
David Chen (哔哩哔哩:TheCW)在哔哩哔哩上对 [Neo]Vim 的详细介绍和展示,这是促使我入坑的主要因素;配置初期也参考了他分享的配置文档。相关链接如下:
- 上古神器Vim:从恶言相向到爱不释手 - 终极Vim教程01 - 带你配置属于你自己的最强IDE
- 上古神器Vim:进阶使用/配置、必备插件介绍 - 终极Vim教程02 - 带你配置属于你自己的最强IDE
- 「妈妈不会告诉你的Vim技巧」 -Vim终极教程03 - 带你配置属于你自己的最强IDE
- 21世纪最强代码编辑器:NeoVim ——就是这些设置让它变成了编辑器之鬼 【附配置与插件教程】
- 【硬货】让你的vim像vscode一样强大 —— coc.nvim终极指南
- Colemak 用户使用的 NeoVim 配置文件
Elijan Mastnak 分享了详细的关于使用 NeoVim 编辑 LaTeX 的系列文章,极大改善了 LaTeX 文档编写体检。相关链接如下:
- Supercharged LaTeX using (Neo)Vim, VimTeX, and snippets
- 1. Suggested Prerequisites for Writing LaTeX in Vim
- 2. An UltiSnips guide for LaTeX workflows
- 2. A LuaSnip guide for LaTeX workflows
- 3. Vim’s
ftplugin
system - 4. Getting started with the VimTeX plugin
- 5. Compiling LaTeX Documents in a Vim-Based Workflow
- 6. Setting Up a PDF Reader for Writing LaTeX with Vim
- 7. A Vimscript Primer for Filetype-Specific Workflows
Dave Lage 的 awesome-neovim 收集了很多优秀的插件,并经常更新,有新需求不妨先在这个仓库看看。