## 1. Vim、Neovim 及区别 Vim:是 Linux 下的一款高度可定制化的文本编辑器,想要在服务器上编辑文件离不开 Vim,Vim 起源于 Vi,并以其模式化操作、丰富的快捷键和插件系统而闻名。它通过命令行界面运行,特别适合于在终端环境下使用,支持多种编程语言的语法高亮和代码补全。 Neovim:是 Vim 的一个分支,于 2014 年推出,旨在解决 Vim 的一些限制并引入现代编辑器特性。它支持异步编程,使用 Lua 作为主要的脚本语言,提供了更高效的性能和更灵活的扩展性,同时保持与 Vim 的高度兼容性,Neovim 的社区也很活跃,有很多优秀的插件让它变得更加高效便利。 Vim 与 Neovim 的区别:虽然 Neovim 在很多方面与 Vim 相似,并且兼容大多数 Vim 的插件和配置,但 Neovim通过采用现代架构和异步 IO,提供了更好的性能和扩展性。Neovim 的配置更加现代化,支持 Lua 脚本,而 Vim主要使用 VimScript,知道 VimScript 的朋友应该知道这门语言不太友好。 ## 2. 安装 Neovim 第一步我们先安装 Neovim ```bash brew install neovim ``` 安装成功之后执行 `nvim`就可以看到 Neovim 的欢迎界面了。 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719721299788-e06066ff-ec0d-46a1-b6d8-4a5eafe0390d.png) ## 3. 安装 LazyVim Neovim 有很多的发行版,每种发行版其实就是对应一套开箱即用的配置,可以免去我们重头开始自己配置所有的东西,比较优秀的发行版有 [NvChad](https://github.com/NvChad/NvChad), [LunarVim](https://github.com/LunarVim/LunarVim), [AstroNvim](https://github.com/AstroNvim/AstroNvim), [SpaceVim](https://github.com/SpaceVim/SpaceVim) 等等。 我使用的是 [LazyVim](https://github.com/LazyVim/LazyVim),它是 lazy.nvim 的作者开源的一套配置,我觉得还是比较好用的,同样也适合新手入门。 官网:[https://www.lazyvim.org/](https://www.lazyvim.org/) lazy.nvim 是 Neovim 下的插件管理工具,LazyVim 当然也内置了 lazy.nvim。 官网:[https://github.com/folke/lazy.nvim](https://github.com/folke/lazy.nvim) ### 3.1. 安装依赖 1. Neovim、Git 已经安装过了。 2. Nerd Font 字体看过前面文章的小伙伴应该也有了。 3. lazygit 可选,给你在终端下提供一个 Git 的可视化界面,不知道的可以了解一下[https://github.com/jesseduffield/lazygit](https://github.com/jesseduffield/lazygit) ```bash brew install jesseduffield/lazygit/lazygit ``` 4. 一个 C 编译器给 nvim-treesitter 使用,gcc 就是一个 C 编译器,一般都是默认系统自带的,`gcc -v`可以查看一下对应的版本,treesitter 是一个编程语言解析器,基于它可以做语言高亮、代码导航、代码格式化等等功能,在安装 Neovim 的时候已经安装了这个依赖。![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719722249457-19a5ba65-d922-4f4a-b6f1-4df76072a4b3.png) 5. telescope.nvim 搜索插件要安装一下,用起来非常方便,可以搜索文件、内容等,安装相关依赖。 ```bash brew install ripgrep brew install fd ``` 6. 终端我们就用 iterm2! ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719721106842-a89d0662-cd81-41d2-91ce-709252bcf510.png) ### 3.2. 安装 LazyVim **第一步**:首先备份原来 Neovim 的配置文件,以后在使用别人的配置文件之前也要养成备份的好习惯,以免覆盖了自己的配置无法找回。 ```bash # required mv ~/.config/nvim{,.bak} # optional but recommended mv ~/.local/share/nvim{,.bak} mv ~/.local/state/nvim{,.bak} mv ~/.cache/nvim{,.bak} ``` **第二步**:下载 LazyVim 的配置 ```bash git clone https://github.com/LazyVim/starter ~/.config/nvim ``` **第三步**:删除 `.git`文件夹,可以关联到自己的远程仓库 ```bash rm -rf ~/.config/nvim/.git ``` **第四步**:启动 Neovim 可以看到 LazyVim 的配置正在初始化。 ```bash nvim ``` 初始化配置成功之后的界面 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719722971451-710a8c94-e491-42c8-bb92-d5bc8c7eb2ce.png) 按 `q`可以回到欢迎界面 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719723026421-51eefa37-c93b-4332-8e15-957b801a340f.png) ` + e`可以显示当前位置的目录树, 默认是空格,再按一次可以隐藏。 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719723110917-8391f034-7f03-4f0b-9ed9-b249411fea69.png) 最后在 Neovim 里执行 `:LazyHealth`查看插件的工作情况,针对报错的可以按照提示进行修复。 ### 3.3. 问题修复 1. 安装 luarocks ```bash brew install luarocks ``` ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719724058550-2e55e99c-6eaf-4fff-b4e9-40152ba43345.png) 2. 安装 wget ```bash brew install wget ``` ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719724452825-7eec8fe7-fcef-4bcf-9f36-5bb35a644710.png) 3. 安装 node 环境 ```bash brew install node ``` ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719724609812-bebb95bb-8ba0-425f-883d-f7538b04f7a0.png) ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719724618793-ed3326ac-71d0-44c4-9aec-981221cf5151.png) 用 npm 安装一下 neovim ```bash npm install -g neovim ``` ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719724777044-23a742a9-e7af-4922-b75a-6978b701c3f1.png) OK,**node 环境非常重要**,很多插件的工作都依赖 node,当然如果你写前端的话也离不开 node。 如果还有其他问题大家可以自行搜索解决了,其实基本上安装好之后就可以正常使用了,这里只不过给大家演示一下遇到如何解决遇到的错误提示。 ## 4. 配置 LazyVim ### 4.1. 基础知识 键默认是空格 存放下载的插件的位置:`~/.local/share/nvim` 目录结构 ```bash . ├── LICENSE ├── README.md ├── init.lua # 初始化配置,启动 lazy.nvim、自定义配置和插件 ├── lazy-lock.json ├── lazyvim.json ├── lua │ ├── config # 配置目录 │ │ ├── autocmds.lua # 每次打开 nvim 自动执行的命令 │ │ ├── keymaps.lua # 快捷键配置 │ │ ├── lazy.lua # lazy.nvim 的配置 │ │ └── options.lua # 个性化配置 │ └── plugins # 插件目录,每个插件对应一个 .lua 文件 │ └── example.lua ├── stylua.toml └── test.txt ``` ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719727576012-c38b42a6-3e8e-47ea-b35e-ae1faa0b0a0c.png) ### 4.2. 内置快捷键 键是一个前置键,默认是 空格,输入一个可以看到 LazyVim 的提示,根据提示操作 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719728081440-37b3320f-8621-4e7d-bcd5-1e835da000c3.png) 基础快捷键: + ``:搜索文件, 关闭。 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719728712037-69f7ef50-63e0-45e2-903e-1754bfa9230a.png) + ` + e`:展示/隐藏目录树 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719728770334-8fb4bade-a0d6-4856-b8d2-519aefeae3b5.png) + `shift + h/l`:左右切换 Buffer + `ctrl + hjlk`:上下左右导航窗口 详细的快捷键使用,可以查看官方文档,建议跟着操作一下主要的快捷键,这东西就是熟能生巧。 快捷键:[https://www.lazyvim.org/keymaps](https://www.lazyvim.org/keymaps) ### 4.3. 自定义快捷键 在 `lua/config/keymaps.lua` 文件中添加自定义的快捷键配置即可。 ```lua -- Keymaps are automatically loaded on the VeryLazy event -- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua -- Add any additional keymaps here local keymap = vim.keymap -- Genreral Keymaps keymap.set("i", "ii", "") -- save file keymap.set("n", "W", ":w") -- exit all file keymap.set("n", "Q", ":qa") -- copy entire file keymap.set("n", "Y", ":%y") ``` 默认的快捷键配置可以在这里查看:[https://www.lazyvim.org/configuration/general](https://www.lazyvim.org/configuration/general) ### 4.4. 配置主题 在 `lua/config/colorscheme.lua` 文件中安装主题,设置 LazyVim 加载对应的主题,除了自带的 `tokyonight` 主题,再推荐两个比较好看好用的主题。 + 安装 gruvbox 主题 ```lua return { -- add gruvbox { "ellisonleao/gruvbox.nvim" }, -- Configure LazyVim to load gruvbox { "LazyVim/LazyVim", opts = { colorscheme = "gruvbox", }, }, } ``` ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719732780182-f7b32de7-4693-47ea-8305-b3e9ec70de39.png) + 安装 everforest 主题 ```lua return { -- add everforest { "neanias/everforest-nvim", version = false, lazy = false, priority = 1000, -- make sure to load this before all the other start plugins -- Optional; default configuration will be used if setup isn't called. config = function() require("everforest").setup({ -- Your config here }) end, }, -- Configure LazyVim to load gruvbox { "LazyVim/LazyVim", opts = { colorscheme = "everforest", }, }, } ``` ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719733051500-70fd3a25-62a9-46fa-b040-11b53a7d0a7b.png) + 安装 catppuccin 主题 ```lua return { -- add catppuccin { "catppuccin/nvim", lazy = true, name = "catppuccin", opts = { integrations = { aerial = true, alpha = true, cmp = true, dashboard = true, flash = true, gitsigns = true, headlines = true, illuminate = true, indent_blankline = { enabled = true }, leap = true, lsp_trouble = true, mason = true, markdown = true, mini = true, native_lsp = { enabled = true, underlines = { errors = { "undercurl" }, hints = { "undercurl" }, warnings = { "undercurl" }, information = { "undercurl" }, }, }, navic = { enabled = true, custom_bg = "lualine" }, neotest = true, neotree = true, noice = true, notify = true, semantic_tokens = true, telescope = true, treesitter = true, treesitter_context = true, which_key = true, }, }, }, -- Configure LazyVim to load gruvbox { "LazyVim/LazyVim", opts = { colorscheme = "catppuccin", }, }, } ``` ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719733251170-589be043-be67-4b2c-afb5-04d00aed5fb9.png) ### 4.5. 配置 C/C++ 环境 配置环境可以通过 LazyVim Extras 提供的开箱即用的功能进行配置,可以看到这些都是 Extras 提供的功能。 输入 `:LazyExtras`进入配置界面,可以看到默认打开会给我们推荐可以安装的配置 `Recommended Languages`。 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719743575486-f3489191-bc39-45e8-a986-3dfb94b1d561.png) 找到我们 C/C++ 运行环境 clangd 按 `x`启用配置即可,再按一次关闭配置。 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719743631527-8042f61d-e1a5-4407-98d7-4098fbd6112a.png) 设置完成之后重启 nvim 相关的插件就会自动安装。 编写一个 test.cpp 的文件测试一下代码提示、代码补全、错误诊断、保存格式化等。![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719744186005-fd4fec9e-fcc8-4f36-842e-7d230a94a4af.png) ### 4.6. 配置 JSON 和 Markdown 找到 json 和 markdown 按 `x`启用即可。 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719744353392-c75ba4bb-9452-4f51-8805-2e9ce3248805.png) 找一篇 markdown 文档 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719744655746-544cc5a1-edd2-4b86-8092-322a1b2098e6.png) `leader + c + p`:可以在浏览器预览 ![](https://cdn.nlark.com/yuque/0/2024/png/1863084/1719744722120-dc1b7e19-58d1-428c-9f98-e7ac812e6063.png) 好了安装环境这部分大家需要什么环境自行安装就好了。 后面针对 python 环境的配置可能单独出一篇文章介绍,如果方便地管理 python 环境、在 VSCode 中如何配置等。 ## 5. 最后 本篇介绍了 Vim 和 Neovim,在使用 Neovim 前首先需要掌握 Vim 的使用,因为 Vim 是基础操作,Neovim 只不过是一个可定制化的工具而已,关于 Vim 的使用我想出一个单独的系列好好讲讲。 还讲解了如何安装 Neovim 以及它的发行版 LazyVim,搞清楚它的目录结构、内置快捷键、如何自定义快捷键、配置好看的主题,还有一步很关键的方便的配置开发环境(真的非常方便,网上很少有相关的文章教你这样安装),总之踩了很多的坑总结的经验都分享给大家了,希望大家可以愉快的使用 Neovim Coding。 Neovim 还有很多的插件,每一个插件的用途可以自行在 GitHub 搜索学习。