持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情
在学习了掘金小册 -- Neovim 配置实战:从0到1打造自己的IDE后,我收获到了许多新知识,以前对于Vim,总是感到非常酷炫,但是一想到需要繁杂的配置就还是不想折腾,可是通过该课程,我发现其实配置并没有那么复杂,相反,这个折腾的过程是让人很快乐的
我打算把我学习的过程记录下来,写下一些配置过程中的详细记录以及使用心得,我会用一个专栏来带你使用Neovim打造一个属于你的IDE,使用Neovim而不是Vim是因为它更新,有更多特性也更加好用,并且当你习惯了使用Neovim后,就可以完全扔掉鼠标,使用全键盘操作,提高输入效率!
这个专栏只是记录我个人的学习过程和心得,如果有打算真的使用Neovim作为IDE的话,强烈建议购买Neovim 配置实战:从0到1打造自己的IDE这本小册,作者写的真的很好,相信你自己阅读过之后也会有自己的一些想法
本篇文章是该系列的第一篇,主要涉及:
- 字体的安装,使用
Nerd fonts字体,让你的Neovim支持显示丰富的图标 - 对
Neovim的默认配置进行一些修改,让其使用起来更加舒服,每个配置我都会声明注释,并且解释为什么要这样配置
1. 字体安装
在NerdFont官网下载你喜欢的字体
这里我使用Caskaydia Cove Nerd Font这个字体
要支持图标就必须使用
Nerd Font版本的字体,Nerd Font不是字体,可以把它理解成是一个补丁,只要有你喜欢的字体对应的Nerd Font补丁,那么安装之后你仍然使用的是你喜欢的字体,只是它现在变得可以支持显示图标了
2. 检验Nerd Font是否生效
可以打开NerdFont cheat-sheet,点击Show All Icons,然后随便找一个图标,点击Icon进行复制
如果能够正常显示,那么字体这部分就算完成了,接下来就可以安装
Neovim了
3. 安装Neovim
可以在Neovim的wiki中找到安装方法
我的系统是wsl2的Ubuntu 20.04,所以使用apt进行安装
sudo add-apt-repository ppa:neovim-ppa/unstable
sudo apt-get update
sudo apt-get install neovim
由于直接安装的话装的是旧版本的Neovim,比如我这里直接装得到的是0.4.3版本的Neovim
为了获得最新版的Neovim,需要添加一下它的仓库源,所以这里要添加ppa:neovim-ppa/unstable这个仓库
安装完后输入nvim -v,如果看到版本是0.7.0或以上就ok了
4. 配置入口文件
Neovim的配置入口文件并不是像vim一样放在用户目录的.vimrc中的,而是在~/.config/nvim/init.lua或init.vim,不过现在推荐使用lua进行编写
这个配置文件的说明在neovim.io/doc/user/st…中可以看到
5. 编写基础配置basic.lua
创建~/.config/nvim/lua/basic.lua,在basic.lua中配置一些基本的配置,会对Neovim的默认行为做一些重置
5.1 作用域
首先对配置的作用域做一下声明,可以对多个作用域进行单独的配置,比如希望一个配置在全局生效,还是说只在窗口中生效等等
vim.o:普通作用域(common)vim.b:缓冲区作用域(buffer)vim.w:窗口作用域(window)vim.bo:buffer-local配置项vim.wo:window-local配置项
5.2 .vimrc普通配置项在lua中的配置
在作用域后面直接编写普通的vim配置即可,比如说scrolloff这一配置,它是控制光标上下移动的时候让上下保留多少行的
scrolloff配置项的效果
可以看到,配置了之后能够让我们在光标上移下移的时候,始终保持光标的上方或者下方有
8行的空余
如果是在vim中,我们可以直接在.vimrc中配置set scrolloff=8,这样就会出现下面的效果
而如果是在Neovim中通过lua配置的话,我们只需要在作用域中配置相应配置项即可,比如scrolloff这个配置项,就可以配置成vim.o.scrolloff = 8,o是普通作用域,一般我们的配置都会配置在o作用域下,它的效果就等同与你在.vimrc中配置set scrolloff=8
5.3 .vimrc布尔配置项在lua中的配置
在.vimrc中,比如我希望文本超过屏幕的时候,不要折行显示,那么我会配置一个set nowrap的配置项,在结合上set sidescrolloff=8,就可以让文本不折行,并且水平移动的时候,始终会保持光标的左侧或右侧有8个空格的间隔
这里的
nowrap就是一个布尔类型的配置项,那么在lua中配置的时候,直接配置成
vim.o.wrap = false
了解了普通值的配置和布尔值的配置后,就可以看懂待会的basic.lua的配置的意思啦
5.2 basic.lua的配置
所有通用配置如下,已经给出相关注释,可根据自己的需求进行修改
-- 使用 utf8 编码
vim.g.encoding = "utf-8"
vim.o.fileencoding = "utf-8"
-- 禁止折行显示文本
vim.o.wrap = false
-- 光标移动的时候始终保持上下左右至少有 8 个空格的间隔
vim.o.scrolloff = 8
vim.o.sidescrolloff = 8
-- 相对行号 方便进行数字范围的操作
vim.o.number = true
vim.o.relativenumber = true
-- 高亮显示光标所在行
vim.wo.cursorline = true
-- 显示左侧图标指示列
vim.wo.signcolumn = "yes"
-- 右侧参考线
vim.wo.colorcolumn = "80"
-- 使用空格替代 tab
vim.bo.expandtab = true
-- NORMAL 模式下 >> << 和 INSERT 模式下 CTRL-T CTRL-D 的缩进长度
vim.o.shiftround = true
vim.o.shiftwidth = 2
-- 1 个 tab 显示为 2 个空格
vim.o.tabstop = 2
vim.bo.tabstop = 2
-- INSERT 模式下 1 个 tab 代表 2 个空格
vim.bo.softtabstop = 2
-- 新行对齐当前行
vim.bo.autoindent = true
vim.bo.smartindent = true
-- 搜索大小写不敏感 而在包含大写的时候让搜索变成大小写敏感
vim.o.ignorecase = true
vim.o.smartcase = true
-- 搜索结果不高亮显示
vim.o.hlsearch = false
-- 输入的同时搜索
vim.g.incsearch = true
-- 命令行高设置为 2 行
vim.o.cmdheight = 2
-- 当文件被外部程序修改的时候 自动加载修改后的内容
vim.g.autoread = true
vim.bo.autoread = true
-- 光标在行首的时候,使用左右方向键可以跳转到上一行或下一行
vim.o.whichwrap = "<,>,[,]"
-- 允许隐藏被修改过的 buffer
vim.o.hidden = true
-- 开启鼠标支持
vim.o.mouse = "a"
-- 禁止创建备份文件
vim.o.backup = false
vim.o.writebackup = false
vim.o.swapfile = false
-- 缩短 swap file 的更新时间间隔
vim.o.updatetime = 300
-- 设置快捷键触发的等待时间
vim.o.timeoutlen = 500
-- 分隔窗口的时候 新窗口从下面或者右边出现
vim.o.splitbelow = true
vim.o.splitright = true
-- 自动补全但是不会自动选中
vim.o.completeopt = "menu,menuone,noselect,noinsert"
-- 补全增强
vim.o.wildmenu = true
-- 补全最多 10 行
vim.o.pumheight = 10
-- 永远显示 tabline
vim.o.showtabline = 2
-- 使用增强状态栏插件后不需要 vim 的模式提示
vim.g.showmode = false
-- 样式
vim.o.background = "dark"
vim.o.termguicolors = true
vim.opt.termguicolors = true
-- 把空格显示成一个点
vim.o.list = true
vim.o.listchars = "space:·"
-- Dont' pass messages to |ins-completin menu|
vim.o.shortmess = vim.o.shortmess .. 'c'
怎么知道每个配置项应该放在哪个作用域呢?比如cursorline这个配置项为啥是放在wo中呢?
可以在命令模式下输入:help cursorline查看相关文档
可以看到文档中建议我们是放在
local to window作用域中的,也就是wo(window-local)作用域下
所以以后遇到想要新增的配置项可以先通过:help查看一下,再配置到相应作用域中即可
为了方便看到效果,我会把每个配置项对应的在vim中的配置项开启,方便查看开启配置项后的作用是什么
number显示行号
relativenumber显示相对行号
这个配置我觉得很有必要,比如我希望删除上方的这个
PlaneOptions interface,那么在开启了相对行号的前提下,我可以很方便的直接输入d6k,而不需要思考应该删除几行,花时间去数它
cursorline高亮光标所在行
signcolumn显示左侧图表指示列
colorcolumn=80开启右侧参考线
这个可以提示我们代码超过这个参考线的时候,表示代码已经太长了,建议换一下行
它结合
prettier使用会很好用,prettier中配置每行的长度默认是80,超过的时候就会在格式化的时候自动换行
expandtab使用空格替代tab
开启后就会在按下
tab的时候使用空格去填充,而不是真的插入一个\t制表符,它应当配置在bo作用域下
shiftwidth缩进空格数
在NORMAL模式下可以使用>>向右缩进,<<向左缩进
或者在INSERT模式下使用CTRL-T向右缩进,CTRL-D向左缩进
shiftwidth就是控制缩进的空格个数的,还要结合shiftround配置项使缩进命令使用shiftwidth指定的长度
tabstop配置tab的空格数
默认情况下一个tab是8个空格,我个人更喜欢一个tab为2个空格,但是tabstop只是修改显示上一个tab为2个空格,如果文件中实际的一个tab是插入了8个空格的话,它仍然是8个空格,当你在INSERT模式下按下一个tab后,虽然看到的是缩进了2个空格,可实际上文件中插入了8个空格
那么要如何在INSERT模式下也让tab为2个空格呢?那就需要配置softtabstop了
autoindent和smartline让新行的缩进更加合理
autoindent可以使新行的缩进和上一行的缩进保持一致
smartline的介绍如下
hlsearch关闭搜索结果高亮显示
默认情况下,vim中搜索到的结果会高亮显示,十分丑,每次搜索玩都要手动进入命令模式输入:noh关闭高亮,太麻烦了
将
hlsearch关闭就不会高亮显示搜索的结果了
incsearch输入的同时进行搜索
cmdheight修改命令行高度
修改之前,默认是一行显示
修改成
2行显示