实验环境: VMware+Ubuntu20.4,配置参考

安装

Ubuntu下安装neovim

1
sudo apt install neovim

Python依赖安装

1
sudo apt install python3-neovim

安装终端字体

  1. 进入nerdfonts,选择自己想要的字体,我选择的字体是Hack Nerd Font

  2. 解压字体,到用户字体文件夹中

    1
    sudo unzip Hack -d /usr/share/fonts/Hack
  3. 使用命令安装字体

    1
    2
    3
    4
    cd /usr/share/fonts/Hack
    sudo mkfontscale # 生成核心字体信息
    sudo mkfontdir # 生成字体文件夹
    sudo fc-cache -fv # 刷新系统字体缓存
  4. 在terminal中修改字体

配置nvim

文件目录树

  • core目录:放置一些常用键的映射(options.lua)文件,nvim一些选项的修改(缩进长度等)
  • plugins目录:一些插件的lua文件配置
  • plugin目录:插件包

初始化nvim文件

~/.config/nvim文件目录下新建一个文件init.lua

1
2
touch init.lua
nvim init.lua

文件的内容如下:core.options指向的是./lua/core/options.lua文件内容

lua语法还是相对vim配置语法是比较简单的,--表示注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--核心配置
require("core.options")
require("core.keymaps")

--插件
require("plugins.plugins-setup")--插件安装管理插件
require("plugins.nvim-tree")--目录树插件
require("plugins.lualine")--状态栏
require("plugins.treesitter")
require("plugins.lsp")--代码
require("plugins.cmp")
require("plugins.autopairs")
require("plugins.Comment")
require("plugins.gitsigns")
require("plugins.bufferline")
require("plugins.telescope")

核心文件

option.lua

新建文件

1
2
3
mkdir lua
mkdir lua/core
touch lua/core/options.lua
  • local opt声明局部变量
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
34
35
local opt = vim.opt

-- 行号
opt.relativenumber = true
opt.number = true

-- 缩进
opt.tabstop = 2
opt.shiftwidth = 2
opt.expandtab = true
opt.autoindent = true

-- 防止包裹
opt.wrap = false

-- 光标行
opt.cursorline = true

-- 启用鼠标
opt.mouse:append("a")

-- 系统剪贴板
--opt.clipboard:append("unnamedplus")

-- 默认新窗口右和下
opt.splitright = true
opt.splitbelow = true

-- 搜索
opt.ignorecase = true

-- 外观
opt.termguicolors = true
opt.signcolumn = "yes"
vim.cmd[[colorscheme tokyonight]]--选择对应的主题

keymaps.lua~~~~

新建文件

1
touch lua/core/keymap.lua

文件内容:

像配置vim的按键配置一样,我们先要设置一个主键,将主键设置为空格。

键映射的设置:keymap.set(“模式”,”修改后的键”,”修改前的键”)

建议是不要设置太多的键,否则会导致键位冲突以及难以记住,

键位介绍

  • <CR>表示换行

  • <leader>表示主键

  • <C+w>表示ctrl+一个w键,若w是大写,则是ctrl+shift+w

  • 插入模式退出:ESE->jk(连续点击)

  • 可视模式多行移动:选中多行shift+j向上移动,shift+k向下移动

正常模式:

  • 添加窗口:空格(主键)+sv分割右半区窗口,空格+sh分割下半区窗口

  • 取消搜索高亮:空格+nh

  • 切换标签栏(buffer):空格+l向左切换,空格+l向右切换

  • 打开目录树:空格+e,打开文件目录

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
vim.g.mapleader = " "
local keymap = vim.keymap

-- ---------- 插入模式 ---------- ---
keymap.set("i", "jk", "<ESC>")

-- ---------- 视觉模式 ---------- ---
-- 单行或多行移动
keymap.set("v", "J", ":m '>+1<CR>gv=gv")
keymap.set("v", "K", ":m '<-2<CR>gv=gv")

-- ---------- 正常模式 ---------- ---
-- 窗口
keymap.set("n", "<leader>sv", "<C-w>v") -- 水平新增窗口
keymap.set("n", "<leader>sh", "<C-w>s") -- 垂直新增窗口

-- 取消高亮
keymap.set("n", "<leader>nh", ":nohl<CR>")

-- 切换buffer
keymap.set("n", "<leader>l", ":bnext<CR>")
keymap.set("n", "<leader>r", ":bprevious<CR>")

-- ---------- 插件 ---------- ---
-- nvim-tree
keymap.set("n", "<leader>e", ":NvimTreeToggle<CR>")

插件安装

plugins-setup.lua:自动安装插件管理文件

新建文件:

1
2
mkdir lua/plugins
touch lua/plugins/plugin-set.lua
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
-- 自动安装packer
local ensure_packer = function()
local fn = vim.fn
local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
if fn.empty(fn.glob(install_path)) > 0 then
fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
vim.cmd [[packadd packer.nvim]]
return true
end
return false
end

local packer_bootstrap = ensure_packer()

-- 保存此文件自动更新安装软件
-- 注意PackerCompile改成了PackerSync
-- plugins.lua改成了plugins-setup.lua,适应本地文件名字
vim.cmd([[
augroup packer_user_config
autocmd!
autocmd BufWritePost plugins-setup.lua source <afile> | PackerSync
augroup end
]])

return require('packer').startup(function(use)
use 'wbthomason/packer.nvim'
use 'folke/tokyonight.nvim' -- 主题
use {
'nvim-lualine/lualine.nvim', -- 状态栏
requires = { 'kyazdani42/nvim-web-devicons', opt = true } -- 状态栏图标
}
use {
'nvim-tree/nvim-tree.lua', -- 文档树
requires = {
'nvim-tree/nvim-web-devicons', -- 文档树图标
}
}
use "christoomey/vim-tmux-navigator" -- 用ctl-hjkl来定位窗口
use "nvim-treesitter/nvim-treesitter" -- 语法高亮
use "p00f/nvim-ts-rainbow" -- 配合treesitter,不同括号颜色区分
use {
"williamboman/mason.nvim",
"williamboman/mason-lspconfig.nvim", -- 这个相当于mason.nvim和lspconfig的桥梁
"neovim/nvim-lspconfig"
}
-- 自动补全
use "hrsh7th/nvim-cmp"
use "hrsh7th/cmp-nvim-lsp"
use "L3MON4D3/LuaSnip" -- snippets引擎,不装这个自动补全会出问题
use "saadparwaiz1/cmp_luasnip"
use "rafamadriz/friendly-snippets"
use "hrsh7th/cmp-path" -- 文件路径

use "numToStr/Comment.nvim" -- gcc和gc注释
use "windwp/nvim-autopairs" -- 自动补全括号

use "akinsho/bufferline.nvim" -- buffer分割线
use "lewis6991/gitsigns.nvim" -- 左则git提示

use {
'nvim-telescope/telescope.nvim', tag = '0.1.1', -- 文件检索
requires = { {'nvim-lua/plenary.nvim'} }
}

if packer_bootstrap then
require('packer').sync()
end
end)

参考:【全程讲解】Neovim从零配置成属于你的个人编辑器_哔哩哔哩_bilibili