0x02. 也许你该用 NeoVim 写 Rust-使用插件

有一个词叫 DRY(Don't Repeat Yourself),社区有很多 NeoVim 的高质量插件,这节我们来了解如何利用开源资源来,毕竟自己写一个 Lua 版的 NeoVim 插件,需要了解大量 NeoVim 的 API。

Lazy.nvim

我们首先来了解第一个 NeoVim 的插件,它就是 lazy.nvim,利用这个插件可以管理其他插件。可以简单查看下这个插件仓库的 README,我们要做得就是把它的安装代码整合到当前的配置结构中。先回顾一下之前的结构

bash 复制代码
.
├── README.md
├── init.lua
├── lua
│   └── common
│       ├── basic.lua
│       └── init.lua
└── stylua.toml

我们在 lua 文件夹下建一个 utils 文件夹,然后创建个 global.lua 文件,里面的内容就写下面这些(这些代码来自 lazy.nvim 的仓库 README)

lua 复制代码
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", -- latest stable release
    lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

然后继续在入口文件引入,于是入口文件就变成

lua 复制代码
require "utils.global"
require "common.init"

整个配置的结构就变成

bash 复制代码
.
├── README.md
├── init.lua
├── lua
│   ├── common
│   │   ├── basic.lua
│   │   └── init.lua
│   └── utils
│       └── global.lua
└── stylua.toml

通过 Lazy.nvim 安装其他插件

根据上面的描述,不出意外 Lazy.nvim 已经配好,先别急着退出 NeoVim,先配置一下用它安装其他插件。

继续在 common 目录创建个 plugins.lua 文件,我在里面已经写上了一些基础常用插件,这些字符串表示的是 GitHub 的用户名跟仓库名,如果不信可以随意拼上 https://github.com/ 到对应仓库主页看看

lua 复制代码
require("lazy").setup {
  "folke/which-key.nvim",
  "tpope/vim-surround",
  {
    "nvimdev/hlsearch.nvim",
    event = "BufRead",
    config = function()
      require("hlsearch").setup()
    end,
  },
  { "catppuccin/nvim", name = "catppuccin" },
}

更多关于 Lazy.nvim 的用户可以查看插件的 README。

同理我们需要在 common 的 init.lua 加上刚才新建的文件,加完后的内容长这样

lua 复制代码
require "common.basic"
require "common.plugins"

现在我们再来看看当前的配置目录结构

bash 复制代码
.
├── README.md
├── init.lua
├── lua
│   ├── common
│   │   ├── basic.lua
│   │   ├── init.lua
│   │   └── plugins.lua
│   └── utils
│       └── global.lua
└── stylua.toml

此时只要重启一下 NeoVim,等待一段时间,就会自动安装好 lazy,如果期间没啥反应,我的建议是开一下那啥上网工具,要记得让终端也走那啥上网,除非你知道其他一些操作方式,总之就是能上那啥就行。

简单介绍一些插件

上面已经给出了一些我认为相当常用的插件,但事实上,除了 tpope/vim-surroundnvimdev/hlsearch.nvim,其他插件都是不生效的,前者是加载就自动配置好,后者是已经在 config 回调里建立了默认配置。

vim-surround 是一个什么插件,它是神奇到一个叫 Helix 的编辑器在其默认实现里就包含类似功能的一个插件,举个例子,你有一段代码

rust 复制代码
let a = 10 * 3 + 2;

你想改变四则运算的顺序,让 3 + 2 先执行,你会想到把代码变成

rust 复制代码
let a = 10 * (3 + 2);

实际操作就变成你把光标移动到 3 的前面加了一个 (,然后把光标移到 2 的后面加了一个 )。此时如果 vim-surround 安装没出问题,你就可以用 Vim 的 Visual 模式把 3 + 2 选中再按大写 s 再按 ( 或者 ),它会把光标选中的内容改成 (3 + 2),当然还有其他的玩法,可以看看插件的 README 详细了解。

相关推荐
Dontla39 分钟前
Rust泛型系统类型推导原理(Rust类型推导、泛型类型推导、泛型推导)为什么在某些情况必须手动添加泛型特征约束?(泛型trait约束)
开发语言·算法·rust
梦想画家42 分钟前
精通rust宏系列教程-入门篇
rust·元编程·rust宏
喜欢打篮球的普通人1 小时前
rust模式和匹配
java·算法·rust
monkey_meng3 小时前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
大鲤余3 小时前
Rust,删除cargo安装的可执行文件
开发语言·后端·rust
Source.Liu3 小时前
不安全 Rust
安全·rust
MavenTalk5 小时前
Move开发语言在区块链的开发与应用
开发语言·python·rust·区块链·solidity·move
vortex55 小时前
Vim 编辑器学习笔记
学习·编辑器·vim
许嵩6618 小时前
IC 脚本之VIM 记录
linux·编辑器·vim
幸运小圣1 天前
Vue3 -- 项目配置之stylelint【企业级项目配置保姆级教程3】
开发语言·后端·rust