什么是neovim
neovim诞生的背景
一个巴西程序员申请向vim合入一些patch,但是这些patch遭到vim创始人的拒绝。
在此背景下,该程序员fork了vim项目,并在此基础上发起了neovim项目。
neovim是基于vim项目开发的新项目,它能够完全兼容vim,并且提供了一些vim不具备的优秀功能。
neovim的特点
//todo
我是在网上调研了neovim比vim更加易用,因此我才使用neovim,后期补充自己对neovim的使用感受以及特点
安装neovim
以windos为例,直接从github上下载对应版本即可。
下载地址是这里:Neovim下载地址, 我这里选择的版本是:v0.9.1
。
将下载好的neovim zip包解压至指定目录,并将{NEOVIM_HOME}\bin
目录配置到系统环境变量中,即可完成对neovim的安装。
针对windows版本,neovim提供了两个命令:nvim.exe
和nvim-qt.exe
,前者是命令行式的,后者提供一个图形化界面。这里常用的式nvim.exe
,也可以简写为nvim
我们可以通过如下命令验证neovim及其环境变量是否安装成功。
1 | 打开powershell,输入如下命令 |
neovim自检
在powershell中输入nvim打开neovim,在normal模式下,输入命令:checkhealth
,可以实现对neovim的自检工作。
同时,如果没有配置neovim所需要的配置文件的话,自检结果还会显示需要我们在指定路径下新建neovim所需要的配置文件。
对于windows而言,需要在${user}\AppData\Local\nvim
目录下新建init.lua
文件,如果文件夹不存在,需要手动创建。
neovim 配置
packer.vim
packer.nvim是neovim的插件管理工具,基于该工具可以安装我们所需的插件。
要想使用packer.vim,需要首先从github上下载该安装包,并放到指定路径下,对于windows用户而言,默认需要将其放到这个目录中:${user}\AppData\Local\nvim-data\site\pack\packer\start
,如果该目录不存在,请手动创建。
1 | cd ${user}\AppData\Local\nvim-data\site\pack\packer\start |
然后进入到neovim的配置目录(${user}\AppData\Local\nvim
),新建一个文件夹,文件夹名字随意,这里我选择名字为lua
,然后进入到lua文件夹中,新建一个lua文件,名字随意,这里我选择新建一个plugin_manager.lua
.然后在文件中写入如下内容。
1 | local ensure_packer = function() |
最后,再在${user}\AppData\Local\nvim\init.lua
中添加如下内容,表示使用该插件。
1 | -- 其中lua文件夹这个路径可以缺省,neovim会自动在该目录下的lua文件夹中寻找 |
至此,packer.nvim插件管理工具安装过完成。
可以通过打开neovim,并在normal模式下执行:PackerSync
来检查我们的安装效果。
文档树插件nvim-tree
nvim-tree能够使得neovim实现如下形式的功能。
安装该插件的方式非常简单,在plugin_manager.lua
文件中的-- use 'foo2/bar2.nvimm
和 -- Automatically set up your configuration after cloning packer.nvim
之间添加如下内容即可:
1 | use { |
然后保存,重启neovim,在normal模式下输入命令:PackerSync
即可实现对该插件的安装。
为了更好的使用nvim-tree
,需要对该插件进行额外的配置。
在lua
文件夹下创建一个plugins-config
文件夹,并在该文件夹中创建nvim-tree
的配置文件nvim-tree.lua
,内容如下所示:
1 | -- 表示默认情况下不打开nvim-tree |
然后在init.lua
配置文件中,指定对该配置的使用:
1 | -- 其中lua文件夹这个路径可以缺省,neovim会自动在该目录下的lua文件夹中寻找 |
保存并重启neovim,在normal模式下使用命令:NvimTreeToggle
,就可以使用文档树的功能了。
:NvimTreeToggle
命令太长了,输入有些麻烦,neovim支持快捷键,因此我们可以设置快捷键来实现该功能。
在lua
文件夹下创建一个core文件夹,并在该文件夹下创建keymaps.lua文件,专门用于设置各种快捷键。为实现上述快捷键功能,填写如下内容。
1 | -- 设置<leader>表示一个空格键 |
于此同时,在init.lua
中引用该快捷键配置。
1 | -- 其中lua文件夹这个路径可以缺省,neovim会自动在该目录下的lua文件夹中寻找 |
保存重启neovim,就可以按快捷键空格 + e
键,快速打开文档树。
nvim-tree
首先会有文档树的导航功能,其次它还会对不同的文件按照不同图标形式显示。为了实现图标的显示,需要安装nerd font
字体。
nerd font
字体安装
所谓Nerd Fonts 是一个使用大量字体图标来解决程序员在开发过程中缺少合适字体的问题的项目。
举个例子诸如如下的图标,我们在powershell
中是不能直接粘贴复制的。
但是一旦当前字体支持nerd font
,就会实现快速的粘贴,如下所示。
可以在这个网站上选择自己喜欢的nerd font
字体:https://www.nerdfonts.com/font-downloads
,下载字体包,解压并安装。
我这里选择的是:font-sourcecodepro-nerd-fon
,字体效果如以下所示。
字体安装之后,重启powershell
,然后再powershell
的设置 - 默认值 - 外观 - 字体
中选择目标字体,即可完成设置,再次打开neovim即可实现上面nvim-tree中的文档树效果及图标显示。
该字体不仅仅再这里需要,后面很多需要图标的插件都需要这种类型的字体。
主题插件
tokyonight是一个主题插件,支持4种主题:
1 | tokyonight-night |
安装方式和安装nvim-tree
方式一样,也是现在plugins_manager.lua
中声明,如下所示:
1 | use 'folke/tokyonight.nvim' |
要使该主题生效,需要进行声明,为方便管理,我再lua
文件夹下创建一个core文件夹,然后新建文件options.lua
文件,填写如下内容:
1 | -- 使用tokyonight主题 |
同时在init.lua
文件中声明:
1 | -- 其中lua文件夹这个路径可以缺省,neovim会自动在该目录下的lua文件夹中寻找 |
标签插件
neovim默认的标签也不好,可以使用bufferline插件,实现一个好看的标签页,如下图所示。
安装该插件的方式和安装nvim-tree
一样,也是现在plugins_manager.lua
中声明,如下所示:
1 | use {'akinsho/bufferline.nvim', tag = "*", requires = 'nvim-tree/nvim-web-devicons'} |
该插件需要进行一些配置,以便于更好的使用。在plugins-config目录下新建bufferline.lua
,填写如下内容:
1 | vim.opt.termguicolors = true |
同时在init.lua
声明对该配置的使用。
1 | -- 其中lua文件夹这个路径可以缺省,neovim会自动在该目录下的lua文件夹中寻找 |
保存重启neovim,执行:PackerSync
命令实现对插件的安装,再次重启neovim即可使用该插件功能。
状态栏插件安装
这里需要的插件是lualine
,该插件实现的功能是neovim的地步状态栏更加好看。如下图所示。
安装该插件的方式和安装nvim-tree
一样,也是现在plugins_manager.lua
中声明,如下所示:
1 | use { |
同样重启neovim,执行:PackerSync
完成对该插件的安装工作。
该插件同样需要一些配置,因此在plugins-config
目录下新建lualine.lua
配置文件,并填写如下内容:
1 | require('lualine').setup({ |
然后在init.lua
中引用该配置。
1 | -- 其中lua文件夹这个路径可以缺省,neovim会自动在该目录下的lua文件夹中寻找 |
然后重启neovim,就可以发现状态变成上图所示的形式了。
全文检索插件
这里需要的插件是telescope
,该插件实现的功能是能够在项目中对文件及文件内容进行检索。如下图所示。
安装该插件的方式和安装nvim-tree
一样,也是现在plugins_manager.lua
中声明,如下所示:
1 | use { |
同样重启neovim,执行:PackerSync
完成对该插件的安装工作。
该插件同样需要一些配置,因此在plugins-config
目录下新建telescope.lua
配置文件,并填写如下内容:
1 | local builtin = require('telescope.builtin') |
然后再init.lua
中引用该配置。
1 | -- 其中lua文件夹这个路径可以缺省,neovim会自动在该目录下的lua文件夹中寻找 |
然后重启neovim,按快捷键空格 + f + f
就可以实现对文件的搜索了。
安装ripgrep
要实现对文件内容的检索,需要安装ripgrep
.
首先下载该安装包,可以在这里下载:https://github.com/BurntSushi/ripgrep/releases
. 解压,安装,并将其添加至环境变量中,即完成了该工具包的安装。
然后重启powershell
,重新打开neovim,按空格 + f + g
即可实现对文件内容的搜索,如下图所示。
vim-tmux-navigator插件
该插件可以实现焦点快速从文件侧转移至文档树导航侧,或者反过来。
安装该插件的方式和安装nvim-tree
一样,也是现在plugins_manager.lua
中声明,如下所示:
1 | use "christoomey/vim-tmux-navigator" |
同样重启neovim,执行:PackerSync
完成对该插件的安装工作。
该插件安装成功之后,重启neovim,按ctrl + H
,ctrl + L
快速实现焦点切换。
其他的一些配置
在options.lua文件中配置。
1 | local opt = vim.opt |