最近计划用python写一些工具,刚好近几个月以来常用的电脑没装ide和某个有重量级且有无可估量潜力的editor。然而经过平铺窗口管理器和vim的调教后双手已经无法脱离键盘了…故打算重整一下nvim,令其能够在尽可能简单的配置下实现ide的常规功能
效果:
1-需求&对应插件
算上以前装的插件,总结下来需求有以下几点:
我使用的neovim包管理为lazy.nvim ,所以以下内容只对lazy.nvim负责
其实nvim已经内置lsp client了,管理lsp可以all in mason。笔者选择coc的原因纯粹是因为coc是先找到的工具,以后再去考虑mason
编译完成的coc体积高达300m,太悲伤了
关于mason和coco
2-管理Lazy.nvim
对于Lazy.nvim官方推荐的做法 ,我并不是很感冒,原因有三个:
- 我想在只一个文件里管理我需要开启的插件及插件对应的配置,即使需要人工干预得更多
- 一个一个管理更加直观
- 因为网络原因,我更喜欢将仓库手动clone下来,再手动指定插件目录,以体积换取配置迁移的便利(所以下面有个插件仓库)
所以这是我的配置结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| ➜ nvim tree -L 2 . . ├── init.lua ‘ ├── init.vim.bak ├── lazy-lock.json ├── lua │ ├── lazy_conf.lua ‘ │ ├── opt_conf.lua ‘ │ └── plugins_conf ‘ └── plugins ‘ ├── coc.nvim ├── indent-blankline.nvim ├── nvim-tree.lua ├── nvim.osc52 └── sidebar.nvim
|
init.lua
的唯一的作用就是用require
调用真正的配置文件:
1 2 3 4 5 6 7 8
|
require('lazy_conf')
require('opt_conf')
|
nvim/lua/opt_conf.lua
使用lua重写我的vim配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| vim.opt.number = true vim.opt.relativenumber = true vim.opt.cursorline = true vim.highlight.priorities.syntax = 50 vim.opt.clipboard:append {'unnamedplus'}
vim.opt.tabstop = 2 vim.opt.shiftwidth = 2 vim.opt.softtabstop = 2 vim.opt.expandtab = true vim.opt.smartindent = true vim.cmd.colorscheme('desert') vim.cmd.colorscheme('habamax')
|
nvim/lua/lazy_conf.lua
用于配置lazy.nvim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not (vim.uv or vim.loop).fs_stat(lazypath) then vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath, }) end vim.opt.rtp:prepend(lazypath)
require("lazy").setup({ {"nvim-lualine/lualine.nvim",dependencies = { 'nvim-tree/nvim-web-devicons' }}, {name="osc52",dir="/home/baka/.config/nvim/plugins/nvim.osc52"}, {name="coc-install",dir="/home/baka/.config/nvim/plugins/coc.nvim"}, {name="indent-blankline",dir="/home/baka/.config/nvim/plugins/indent-blankline.nvim",main="ibl", opts={},}, {name="nvim-tree",dir="/home/baka/.config/nvim/plugins/nvim-tree.lua",version = "*",lazy = false,dependencies = {"nvim-tree/nvim-web-devicons",},config = function() require("nvim-tree").setup {} end,},
})
require('plugins_conf.nvim-osc52_conf') require('plugins_conf.lualine_conf') require('plugins_conf.coc-nvim_conf') require('plugins_conf.nvim-tree_conf') require('plugins_conf.nvim-tree-keysmapping_conf')
|
3-绑定快捷键
本节参考:
https://neovim.io/doc/user/api.html#nvim_exec2()
https://neovim.io/doc/user/lua.html#vim.keymap.set()
上述nvim-tree插件的边栏呼出的话需要执行:NvimTreeToggle
。尝试了该仓库doc的快捷键绑定方法,发现只能边栏在已经呼出的情况下使用。但是我需用control+l
随时呼出关闭,那么在该插件的配置文件中添加下面行:
1 2 3 4
|
vim.keymap.set('n', '<C-l>',function() vim.api.nvim_cmd({cmd="NvimTreeToggle"},{output}) end)
|