在编程的世界中,有两个上古神器。一个叫做 “神之编辑器 Emacs”,另一个叫做 “编辑器之神 vim”。这两个编辑器从诞生到现在,圣战从未结束。无论是 vim 还是 emacs 都在不断的进化和发展,渐渐的 vim 的分支上出现了一颗夺目的新星,他就是 neovim。
neovim 从名称来看:新星的vim。按照官方说明: nvim 是一个 vim 的 fork,主要关注了扩展性和易用性。大量的 vim 用户迁移到 nvim,而 vim 的魅力出了经典的快捷键还有丰富的插件系统,这些 nvim 都继承了下来,同时内置了 LSP,增加了 异步 IO 等新特性。
以下是 Neovim 的一些主要特点和优势:
总体而言,Neovim 是一款非常强大和灵活的文本编辑器,旨在提供现代化的编辑体验,并为用户提供高度的定制能力。无论是初学者还是有经验的 Vim 用户,都可以从 Neovim 的功能和特性中受益。
neovim 中配置可以通过 init.vim 或者 init.lua 进行配置,当前大部分的配置都采用了 lua ,本文也将会通过 lua 进行配置 nvim。如果你还不会使用 lua 也不许需要担心,lua 可以快速上手。你可以直接通过 :h lua-guide
进行查看 lua 教程。
在 mac/linux 中,该配置文件位于 ~/.config/nvim/
目录下,而在 windows 系统中,该目录位于 %USERPROFILE%\AppData\Local\nvim\
。nvim 启动时会加载该目录下的 init.lua 文件,那么只需要在该文件中进行配置即可。
首先对文件的编码格式设置,统一为 UTF-8 。只需要在 init.lua 中添加相关配置。
|
|
这里的 o
和 g
是什么意思呢?
vim.o
意味着可以对全局的选项进行设置,而 vim.g
是进行全局设置。
类似的相关方法还有 vim.wo
设置 window-local 选项、vim.bo
设置 buffer-local 选项等。
对 tab 进行设置, tab 默认为 4 个空格。
|
|
还可以将其他的基础配置添加进来,例如显示行号等,具体配置如下
|
|
vim/neovim 经过多年的发展仍旧活跃,其中插件系统功不可没。丰富的插件可以使得 neovie 分分钟化身为 IDE 。
在社区的发展过程中,vim 的插件系统也不断的壮大,目前 vim 的插件基本可以涵盖编辑的方方面面。针对 neovim,可以通过 awesome-neovim 这个项目查询相关插件。
无论是 vim 还是 neovim,本身并没有插件管理器,并不像 vscode 或者其他编辑器一样,可以方便的对查件进行添加,删除或者更新等操作。当然你也无需要担心,各路大神已经开发出了多个插件管理工具。目前,对于 neovim 来说,比较有名的插件管理工具有 packer.nvim 和 lazy.nvim (注意:不要和 LazyVim 混淆)。
本文采用将会采用 lazy.nvim 作为插件管理工具进行插件管理。如果你使用了 packer.nvim 作为插件管理,并不影响阅读,可以跳过插件管理器章节。
lazy.nvim 作为现在比较流行的插件管理工具,安装其实很简单。在 init.lua 中添加相关代码。
|
|
保存退出后,再次进入 nvim。 nvim 会检查是否存在 lazy, 如果不存在会从 github 上 clone 下来。
通过 :Lazy
命令,如果看到下面的图像,那么就证明 lazy.nvim 安装成功了。
有了 lazy,之后就可以快速的安装,更新和卸载插件。
为了验证 lazy 功能是否正常,那么先安装个主题插件看看。主题插件我选择 catppuccin.nvim。
通过 catppuccin 文档可以查到如何安装,将插件添加到 lazy 配置中。
|
|
退出 neovim,再次进入,就会看到 lazy 在下载相关插件。
安装完成后,发现我们的主体已经被应用,但是等到退出再次进入的时候,发现主题颜色又恢复了默认配色,只需要在配置文件末尾添加一句,用于设置相关的配色。
|
|
其中 catppuccin 还有很多配置,这里不多赘述,可以到相关仓库中查看配置内容。
有了插件管理器,那么就可以添加不同的插件了。
经过上面简单的了解,目前所有的配置都写在 init.lua 中,当添加更多的插件的时候, lua 中的代码也会不断的增加,那么当需要进行修改的时候,查询相关配置也成了一大问题,而通过 lua 的特性,我们可以将不同的配置文件进行拆分,做到高内聚低耦合。
对于 lua 来说,可以通过 require
函数来将不同的 lua 脚本进行导入。
现在同 init.lua 目录下建立 lua 文件夹,在其中新建两个 lua 文件,分别是 basic.lua 和 plugin.lua。
|
|
结构如上目录树所示,之后可以将配置内容分被复制到相关的文件中,将基础配置放在 basic.lua 中,将 lazy 相关的配置复制到 plugin.lua 中。
最后将 init.lua 中引入相关的配置文件即可。
|
|
其中,对于颜色主题的配置我们可以新建一个 theme.lua 文件,将主题配色相关的配置存放,最后不要忘记在 init.lua 中添加该文件。
最后的目录结构如下:
|
|
为了让 vim 更加的顺手,方便我们的使用,针对一些操作需要绑定我们的快捷键,这样让你的操作效率如虎添翼。按照上面的配置规则,新建文件为 keymapping.lua,并在 init.lua 中添加。
vim 的一个重要点就是可以通过快捷键快速高效的完成任务,指哪里打哪里,而在配置快捷键中,其实有怎么几个键需要我们熟知,分被为 Ctrl
、 Alt
和 Shift
键。这里并不是让大家知道这些按键在哪里,而是说配置中,这些键位很常用,并且在配置中这些键位常常简写。
键位 | 简写 |
---|---|
Ctrl | C- |
shift | S- |
Alt | A- |
这三个键位在配置中会非常常见。当然,并不是只有这三个键位可以找到相关的缩写,可以通过 :h key-notations
看到所有的键位说明。
另外,对于 mac 来说是没有 Alt 键的,这样就需要我们修改 Option 键位,这部分可以看 附录/修改 Alt 键位。
leader 键对于 vim 来说是一个非常重要的键,它可以说是在 vim 中使用频率最高的键之一。 leader 顾名思义,处于领导位置,一般作为组合快捷键的先驱,使用其他按键的时候先按下 leader。对于 leader,vim 并没有规定谁是 leader,只要你想,哪个键也可以为 leader。一般会将 空格 等按键设置为 leader 键。
上面这些都是我们配置前的基础知识。下面开始设置相关快捷键。
在 lua 文件夹下新建文件, keybinding.lua,并且在 init.lua 中添加, require("keybinding")
首先便是上面说过的 leader 键。这里我采用空格作为 leader 键。
|
|
关于 mapleader
和 maplocalleader
的区别可以看 https://luciaca.cn/posts/vimscript-learning-on-leaders 相关文档。
在 neovim 中,需要通过 vim.keymap.set()
函数进设置。这个函数需要传入四个参数,分别是 mode
, lhs
, rhs
, opts
。
参数名 | 说明 |
---|---|
mode | 模式的简写,常见的有 n(normal), i(insert), v(view) 等 |
lhs | 可以理解为对应的按键 |
rhs | 对应的功能 |
opts | 相关的设置 |
|
|
这样就可以自定义添加相关按键。
在 setting 中, Profiles-Keys 中, 将 Left Option Key 设置为 Esc+ 。
编辑 alacritty 的配置文件中window.option_as_alt
|
|