neovim 配置

从零开始配置Neovim

本文章用于记录Neovim环境搭建、相关插件配置及安装使用说明

前言

本文章Neovim配置主要将在windows和linux双端下进行,除了Neovim的安装和配置文件位置不同外,配置文件通用(有些许修改)。

搭建的成品主要为增强型文本编辑器因此包含主题、美化、LSP和自动补全,不包含DAP(需自己配置)。

前置知识

Neovim官网

https://neovim.io

安装环境

  • Git >=2.19.0
  • Neovim >= 0.8.0(需LuaJIT构建)
  • Node.js(lsp服务需要)

Lua语言

在配置Neovim时将用到Lua语言,因此需要了解Lua的基本语法和语义。
可参考菜鸟教程

配置文件路径

Nvim 的配置目录在 ~/.config/nvim 下。

在 Linux/Mac 系统上,配置文件为 ~/.config/nvim/init.lua 文件

在windows系统上,配置文件为 Users\Administrator\AppData\Local\nvim\init.lua

理论上来说可以将所有配置的东西都放在这个文件里面,但这样不是一个好的做法,因此要划分不同的文件和目录来分管不同的配置。

配置文件目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
nvim
├── init.lua
└── lua
├── core
│ ├── keymaps.lua
│ ├── lazy.lua
│ └── options.lua
└──plugins
├── cmp.lua
├── lsp.lua
├── nvim-treesitter.lua
├── startuptime.lua
├── telescope.lua
├── tokymight.lua
├── ui.lua
└── utils.lua

注意事项

TreeSitter安装注意

此功能依赖于Tree-Sitter-CLI

1
2
3
4
cargo install tree-sitter-cli

//Node.js
npm install tree-sitter-cli

windows需要安装LLVM(Clang)并添加额外配置。

  1. 可用choco install llvm(in admin powershell)
  2. 在lua文件任意处添加
    1
    require 'nvim-treesitter.install'.compilers = { "clang", "gcc" }
    推荐添加在init.lua中,便于删改。
  3. 重新安装TreeSitter
  4. 重新安装解析器(可能需要node.js)
    在neovim的命令模式中输入
    TSUpdate
    TSUpdate all
    TSInstall c
    TSInstall cpp
    TSInstall python

Telescope安装注意

需额外安装fdripgreptelescope-fzf-native.nvim

windows安装命令

  • fd: winget install sharkdp.fd
  • ripgrep: $ winget install BurntSushi.ripgrep.MSVC

linux(debian)安装命令

  • fd: sudo apt-get install fd-find
  • ripgrep:

    curl -LO https://github.com/BurntSushi/ripgrep/releases/download/13.0.0/ripgrep_13.0.0_amd64.deb
    sudo dpkg -i ripgrep_13.0.0_amd64.deb

telescope-fzf-native安装

需要安装gccorclang(二选一)和make

windows装MinGW要将mingw32\bin\mingw32-make.exe改为mingw32\bin\make.exe

配置详解

init.lua

1
2
3
4
5
6
vim.loader.enable()  --加快启动速度
require("core.lazy") --插件管理
require("core.options") --选项设置
require("core.keymaps") --键盘映射

require 'nvim-treesitter.install'.compilers = { "clang", "gcc" }

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

local keymap = vim.keymap

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

-- ----视觉模式---- ---
-- 单行或多行移动
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", "<C-l>", "<C-w>l")
keymap.set("n", "<C-h>", "<C-w>h")
keymap.set("n", "<C-j>", "<C-w>j")
keymap.set("n", "<C-k>", "<C-w>k")
keymap.set("n", "<leader>wc", "<C-w>c")
-- 取消高亮
keymap.set("n", "<leader>nh", ":nohl<CR>") --即重新载入文件
-- 缓冲文件切换
keymap.set("n", "]b", "<cmd>bNext<CR>")
keymap.set("n", "[b", "<cmd>bN<CR>")
keymap.set("n", "<leader>bc", "<cmd>bd<CR>") --关闭缓冲文件
-- 快速保存
keymap.set("n", "<C-s>","<cmd>w<CR>")
-- ----插件---- ---

options.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
local opt = vim.opt
local buf = vim.b

-- --- Buffer Settings --- --
-- 设置文件为编码为utf-8
buf.fileencoding = "utf-8"

-- --- 全局设置 --- --
-- 行号
opt.relativenumber = true --相对行号
opt.number = true --显示行号

-- 退格键设置
opt.backspace = { "indent", "eol", "start" }

-- 文件更改自动读取
opt.autoread = true

-- 缩进
opt.tabstop = 4
opt.softtabstop = 4
opt.shiftwidth = 4
opt.expandtab = true --空格代替Tab
opt.autoindent = true --自动缩进

-- 防止自动换行
opt.wrap = false

-- 高亮光标行
opt.cursorline = true

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

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

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

-- 显示文件标题
opt.title = true

-- 启用undofile(打开文件时恢复未保存变动)
opt.undofile = true
opt.undodir = vim.fn.expand('$HOME/.nvim-undo') --文件保存地址

-- 禁止备份文件
opt.swapfile = false
opt.backup = false

-- 搜索
opt.ignorecase = true --忽略大小写
opt.smartcase = true --如果有大写字母则不忽略大小写

-- 外观
opt.termguicolors = true
opt.signcolumn = "yes"

使用方法

默认<leader>键为空格

基本快捷键

快捷键 功能 模式
jk 映射 i
<leader>sv 水平新增窗口 n
<leader>sh 垂直新增窗口 n
<C-l> 切换到右边的窗口 n
<C-h> 切换到左边的窗口 n
<C-j> 切换到下边的窗口 n
<C-k> 切换到上边的窗口 n
<leader>wc 关闭窗口 n
<leader>nh 取消高亮 n
<C-s> 快速保存 n
]b 切换到下一个缓冲文件 n
[b 切换到上一个缓冲文件 n
<leader>bc 关闭当前缓冲文件 n
s 快速跳转 n
S 快速选择 n
<leader>qs 快速保存当前状态 n
<leader>ql 快速加载之前状态 n

neo-tree快捷键

快捷键 功能 模式
<leader>e 呼出(关闭)neo-tree n
? 呼出neo-tree帮助 neo-tree
空格/<CR> 确定 neo-tree
a 创建新的文件 neo-tree
A 创建新文件夹 neo-tree
r 重命名 neo-tree
S 水平窗口打开 neo-tree
s 垂直窗口打开 neo-tree
t 新窗口打开 ‘neo-tree’

telescope快捷键

快捷键 功能 模式
<leader>ff 搜索当前目录文件 n
<leader>fr 搜索打开过的文件 n
<leader>fb 搜索缓冲文件 n
<leader>fg 搜索当前目录文件内容 n
<leader>km 搜索快捷键 n

lsp快捷键

快捷键 功能 模式
gD 查看函数声明 n
gd 查看函数定义 n
K 查看函数文档 n
<leader>ca Code Action n
<leader>da 查看建议 n
<leader>F 格式化文档 n
<Tab> 自动补全选择 n
<S-Tab> 选择上一个补全建议 n

终端快捷键

快捷键 功能 模式
<A-\> 打开边框终端 n
<C-\> 打开浮动终端 n
<ESC><ESC> 回到正常模式 t

尾言

部分内容参考B站相关视频(更有关插件跟详细)
https://www.bilibili.com/video/BV1Th4y1j7ou
附上配置好的windows版仓库,下载更该配置即用
https://github.com/GlenPrts/nvim-dot