从零配置专属neovim - 1.配置设计概述


前言

这一篇主要介绍专属配置的目录结构,希望配置支持的特性,以及一些关联的知识(neovim或lua的)~
目前配置的开发还没有完全完成,属于边做边写博客记录。


配置构想

我的配置具有以下特点(或者说特性):

  1. 不需要支持vim,这个配置就是安装了neovim(后续也可能简化成nvim)以后使用的。原因:
    • 因为vim不支持lua,且目前大部分neovim的插件都是使用lua实现,不知道能不能很好地兼容vim;
    • 如果是自己的机器,那么安装并配置neovim还是比较方便,如果是公用环境,一般使用vim只需要基础指令即可,不需要额外配置;
  2. 除了开发工具栈,尽量不需要额外安装其它程序,真需要安装也是通过插件内部安装:
    • 目标是下载配置后放到指定目录下,剩下的安装配置功能可以全由配置控制,不需要手动执行apt install等命令;
    • 期望兼容各操作系统,如果任务要额外安装其它程序,有可能出现linux和macos下面比较好安装但是windows下找不到平替或不兼容的情况。neovim使用lua可以尽量避免这种情况发生;
  3. 配置结构和插件分组管理:配置不与其它配置冲突,如果不想使用本配置只需要注释一行即可让整个配置失效。插件配置分模块管理;
  4. 插件安装代理模式:因为插件基本都是放在github上面管理的,国内拉取有的时候可能会超时,需要手动反复多拉几次才能安装成功。因此期望增加代理配置项,当某个插件设置代理配置项并启用代理模式时,通过国内的插件镜像仓库中(比如在gitee上设置一个定时同步的仓库)拉取,从而加速插件同步;
  5. nerd font可选生效:目前一些比较出名的neovim或vim配置都会选择把nerd font作为必须项,而nerd font并不是要安装在neovim所在机器上生效,而是要安装在使用neovim的机器(即客户端)上才能生效,导致有的时候在不同的客户端机器上如果没有安装nerd font,则neovim中的图形字符会变成乱码。该特性是期望在使用没有安装nerd font的机器上能正常使用neovim,在安装了nerd font的机器上能得到更好的视觉体验;
  6. 支持快捷键映射说明:vim最让初学者头痛的一点就是快捷键过滤多且使用不多很难记住。这个问题通常的解决方案是采用which-key插件,增加一个快捷键映射说明,通过交互式操作让即使不了解当前neovim配置的用户也能正常使用该neovim。本配置也会使用该插件实现类似功能;

配置存放及使用

目前配置存放地址:https://gitee.com/sineatos/dotfiles/tree/master/nvim
linux下使用方法:

# 假如当前所在路径为:~/workspace/
git clone https://gitee.com/sineatos/dotfiles.git
# 建立链接,其中第一项为源地址 第二项为目标地址
ln -s ~/workspace/dotfiles/nvim ~/.config/nvim

windows下的使用方法后续整理。

配置目录说明

|-~/.config/nvim/
	|-init.lua											# neovim的配置入口
	|-lua/												# neovim中所有lua脚本引入的根目录
		|-inori/											# 我的配置名
			|-init.lua
			|-global.lua
			|-options.lua
			|-keymaps.lua
			|-plugin_list.lua
			|-plugin_keymaps.lua
			|-autocommands.lua
			|-plugins/
			|-coding/
			|-ui/
			|-search/
			|-vcs/
			|-project_manage/
			|-other/
			|-util/

内容项说明

~/.config/nvim/init.lua

neovim的配置入口,neovim支持入口文件可以是init.lua或者init.vim,因为不考虑支持vim,所以直接使用init.lua
这个配置文件中只有一行:require "inori"表示引入实际的配置,如果后续不想配置生效,只需要把这一行屏蔽即可。

~/.config/nvim/lua

neovim中所有lua脚本引入的根目录,比如我的配置中有一个lua模块存在的位置为~/.config/nvim/lua/my_module/tool.lua,则在脚本中使用tool模块时require的路径为require("my_module.tool")

~/.config/nvim/lua/inori

我的配置实际目录,inori是“祈”的日语发音。
假如读者想要自定义自己的配置,名为user,则可以将自己的配置都放到~/.config/nvim/lua/user中。
没有把配置直接放在~/.config/nvim/lua/下,而特意都放到~/.config/nvim/lua/inori的原因:把自己的配置全都放到同一个作用域下面,避免与其他插件或配置冲突;

~/.config/nvim/lua/inori/init.lua:我的配置的实际入口。在~/.config/nvim/init.lua中引入该文件时用的是require "inori",即当前的init.luainori模块的具体逻辑,因此init.lua在这里的作用有点像python中模块的__init__.py文件。但需要注意:这其实是neovim启动后对lua解析器的设置使其拥有类似的行为,lua默认是不支持这种语法的,这在调试时需要注意。

~/.config/nvim/lua/inori下的文件说明

  • global.lua:全局配置文件,比如说是否打印调试日志、是否让nerd font生效、是否启动插件仓库代理等;
  • options.lua:nvim的基础选项设置,该脚本会在其它插件加载之前执行,可以认为是默认的选项设置,里面的选项也有可能会被插件中的选项覆盖;
  • keymaps.lua:nvim的基础快捷键设置,该脚本会在其它插件加载之前执行,可以认为是默认的快捷键设置,里面的设置也有可能会被插件中的设置覆盖;
  • plugin_list.lua:inori需要加载的插件列表,列表中每一项是一个table,用于插件加载;
  • plugin_keymaps.lua:inori中插件的快捷键设置,之所以放在一个模块中设置而不是由每个插件自行管理,是因为有的插件的快捷键之间会有联系,所以还是统一管理比较好;
  • autocommands.lua:一些autocommand;

~/.config/nvim/lua/inori下的目录说明

  • plugins/:保存插件管理相关的插件配置,以及inori进行插件加载的模块;
  • coding/:编码相关插件配置,比如代码补全、TreeSitter、LSP、代码片段等‘;
  • ui/:UI配置,比如状态栏,缓冲区信息栏、配色方案、缩进提示、文件树、启动页等;
  • search/:搜索相关,主要是Telescope的配置;
  • vcs/:版本控制配置,主要是git的控制;
  • project_manage/:项目管理;
  • other/:其它插件;
  • util/:一些通用方法实现;

inori启动流程

inori启动流程如图所示:
inori启动流程
该启动流程参考了 neovim-from-scratch 的设计,inori的配置目录设计与其区别包括:

  1. neovim-from-scratch的加载脚本入口是~/.config/nvim/init.lua,而inori则是~/.config/nvim/inori/init.lua,虽然inori这样设计看起来~/.config/nvim/init.lua完成的工作比较鸡肋(只引入inori),但这样设计的目的是把inori的逻辑全放在~/.config/nvim/inori中管理,如果需要整个屏蔽inori时,只需要移除~/.config/nvim/init.lua中的require "inori"即可(也可以认为这样是为了把具体实现细节隐藏起来);
  2. neovim-from-scratch把各种插件的配置及基础设置都放在同一个目录(~/.config/nvim/lua/user/)下,而inori只是把基础设置项放在~/.config/nvim/lua/inori下,插件相关逻辑按照插件的类别分别放在不同的目录下,并且每个插件的配置都单独保存在一个模块(文件)中,这样做是为了更好地管理各个插件的配置,也更好地实现最开始计划inori需要支持的特性;

inori启动流程设计的缺点:与neovim-from-scratch相比流程比较复杂,且有一些需要互相协作的插件的配置可能只能放在其中一个插件的配置中,与前面提到的插件配置互相分离的想法冲突。

inori使用的插件简介

inori使用的插件主要参考neovim-from-scratch,如下图所示:
inori插件整理
本系列文章计划专注描述inori是怎么规划插件加载流程的以及简单介绍代码解析方面插件是怎么辅助开发者完成编码工作的。
本系列文章不会画太多笔墨介绍插件的用法,原因有二:

  1. 有的插件更新比较频繁如果讲解插件的api如何使用或者使用什么快捷键,很有可能因为插件版本升级而失效;
  2. 插件的使用方法在插件的仓库首页README或者wiki中有非常详细的介绍,也可以阅读插件的源码了解其工作原理;

小结

本文主要介绍inori的配置构想、配置目录解析、inori的启动流程及使用了哪些插件。

资料

  • Lua Tutorial:https://www.tutorialspoint.com/lua/index.htm
  • neovim lua指南:https://github.com/glepnir/nvim-lua-guide-zh
  • neovim-from-scratch: https://github.com/LunarVim/Neovim-from-scratch
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值