使用Neovim打造酷炫IDE -- 起步

6,731 阅读8分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

在学习了掘金小册 -- Neovim 配置实战:从0到1打造自己的IDE后,我收获到了许多新知识,以前对于Vim,总是感到非常酷炫,但是一想到需要繁杂的配置就还是不想折腾,可是通过该课程,我发现其实配置并没有那么复杂,相反,这个折腾的过程是让人很快乐的

我打算把我学习的过程记录下来,写下一些配置过程中的详细记录以及使用心得,我会用一个专栏来带你使用Neovim打造一个属于你的IDE,使用Neovim而不是Vim是因为它更新,有更多特性也更加好用,并且当你习惯了使用Neovim后,就可以完全扔掉鼠标,使用全键盘操作,提高输入效率!

这个专栏只是记录我个人的学习过程和心得,如果有打算真的使用Neovim作为IDE的话,强烈建议购买Neovim 配置实战:从0到1打造自己的IDE这本小册,作者写的真的很好,相信你自己阅读过之后也会有自己的一些想法

本篇文章是该系列的第一篇,主要涉及:

  1. 字体的安装,使用Nerd fonts字体,让你的Neovim支持显示丰富的图标
  2. Neovim的默认配置进行一些修改,让其使用起来更加舒服,每个配置我都会声明注释,并且解释为什么要这样配置

1. 字体安装

NerdFont官网下载你喜欢的字体 这里我使用Caskaydia Cove Nerd Font这个字体 image.png 要支持图标就必须使用Nerd Font版本的字体,Nerd Font不是字体,可以把它理解成是一个补丁,只要有你喜欢的字体对应的Nerd Font补丁,那么安装之后你仍然使用的是你喜欢的字体,只是它现在变得可以支持显示图标了


2. 检验Nerd Font是否生效

可以打开NerdFont cheat-sheet,点击Show All Icons,然后随便找一个图标,点击Icon进行复制 image.png image.png 如果能够正常显示,那么字体这部分就算完成了,接下来就可以安装Neovim


3. 安装Neovim

可以在Neovimwiki中找到安装方法 我的系统是wsl2Ubuntu 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.luainit.vim,不过现在推荐使用lua进行编写 这个配置文件的说明在neovim.io/doc/user/st…中可以看到 image.png


5. 编写基础配置basic.lua

创建~/.config/nvim/lua/basic.lua,在basic.lua中配置一些基本的配置,会对Neovim的默认行为做一些重置

5.1 作用域

首先对配置的作用域做一下声明,可以对多个作用域进行单独的配置,比如希望一个配置在全局生效,还是说只在窗口中生效等等

  • vim.o:普通作用域(common)
  • vim.b:缓冲区作用域(buffer)
  • vim.w:窗口作用域(window)
  • vim.bobuffer-local配置项
  • vim.wowindow-local配置项

5.2 .vimrc普通配置项在lua中的配置

在作用域后面直接编写普通的vim配置即可,比如说scrolloff这一配置,它是控制光标上下移动的时候让上下保留多少行的 image.png scrolloff配置项的效果.gif scrolloff配置项的效果 可以看到,配置了之后能够让我们在光标上移下移的时候,始终保持光标的上方或者下方有8行的空余 如果是在vim中,我们可以直接在.vimrc中配置set scrolloff=8,这样就会出现下面的效果 而如果是在Neovim中通过lua配置的话,我们只需要在作用域中配置相应配置项即可,比如scrolloff这个配置项,就可以配置成vim.o.scrolloff = 8o是普通作用域,一般我们的配置都会配置在o作用域下,它的效果就等同与你在.vimrc中配置set scrolloff=8


5.3 .vimrc布尔配置项在lua中的配置

.vimrc中,比如我希望文本超过屏幕的时候,不要折行显示,那么我会配置一个set nowrap的配置项,在结合上set sidescrolloff=8,就可以让文本不折行,并且水平移动的时候,始终会保持光标的左侧或右侧有8个空格的间隔 image.png image.png nowrap和sidescrolloff效果.gif 这里的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查看相关文档 image.png 可以看到文档中建议我们是放在local to window作用域中的,也就是wo(window-local)作用域下 所以以后遇到想要新增的配置项可以先通过:help查看一下,再配置到相应作用域中即可 为了方便看到效果,我会把每个配置项对应的在vim中的配置项开启,方便查看开启配置项后的作用是什么

number显示行号

image.png


relativenumber显示相对行号

image.png 这个配置我觉得很有必要,比如我希望删除上方的这个PlaneOptions interface,那么在开启了相对行号的前提下,我可以很方便的直接输入d6k,而不需要思考应该删除几行,花时间去数它


cursorline高亮光标所在行

image.png


signcolumn显示左侧图表指示列

image.png


colorcolumn=80开启右侧参考线

image.png 这个可以提示我们代码超过这个参考线的时候,表示代码已经太长了,建议换一下行 它结合prettier使用会很好用,prettier中配置每行的长度默认是80,超过的时候就会在格式化的时候自动换行


expandtab使用空格替代tab

image.png 开启后就会在按下tab的时候使用空格去填充,而不是真的插入一个\t制表符,它应当配置在bo作用域下


shiftwidth缩进空格数

NORMAL模式下可以使用>>向右缩进,<<向左缩进 或者在INSERT模式下使用CTRL-T向右缩进,CTRL-D向左缩进 shiftwidth就是控制缩进的空格个数的,还要结合shiftround配置项使缩进命令使用shiftwidth指定的长度


tabstop配置tab的空格数

默认情况下一个tab8个空格,我个人更喜欢一个tab2个空格,但是tabstop只是修改显示上一个tab2个空格,如果文件中实际的一个tab是插入了8个空格的话,它仍然是8个空格,当你在INSERT模式下按下一个tab后,虽然看到的是缩进了2个空格,可实际上文件中插入了8个空格 那么要如何在INSERT模式下也让tab2个空格呢?那就需要配置softtabstop


autoindent和smartline让新行的缩进更加合理

autoindent可以使新行的缩进和上一行的缩进保持一致 smartline的介绍如下 image.png


hlsearch关闭搜索结果高亮显示

默认情况下,vim中搜索到的结果会高亮显示,十分丑,每次搜索玩都要手动进入命令模式输入:noh关闭高亮,太麻烦了 image.png image.pnghlsearch关闭就不会高亮显示搜索的结果了


incsearch输入的同时进行搜索

输入的同时搜索.gif


cmdheight修改命令行高度

修改之前,默认是一行显示 image.png 修改成2行显示 image.png


wildmenu补全增强

image.png