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 详细了解。

相关推荐
Rust研习社7 小时前
组合真的优于继承吗?为什么 Rust 和 Go 都拥抱组合舍弃继承?
后端·rust·编程语言
红尘散仙1 天前
想写一个像样的终端 App?试试把 React 的开发体验搬进 Rust TUI
前端·rust
vivo互联网技术1 天前
从 Web 到桌面:基于 Tauri 2.0 + Vue 3 打造 vivo 线下门店「大头贴」拍照体验系统
前端·rust
Rust研习社2 天前
这 8 个 Rust 学习资源值得每个新手收藏起来
后端·rust·编程语言
星栈2 天前
10 分钟跑起第一个 Dioxus 应用:`dx` CLI、`rsx!` 和热更新好不好用
前端·rust·前端框架
望眼欲穿的程序猿3 天前
读取芯片内部温度传感器
嵌入式硬件·rust
望眼欲穿的程序猿3 天前
ADC 模拟电压采集
嵌入式硬件·rust
codexu_4612291873 天前
NoteGen 里一条记录如何变成 Markdown
前端·笔记·rust·tauri
Rust研习社3 天前
Rust 错误处理的黄金搭档:一个定义错误,一个传播错误
后端·rust·编程语言
techdashen3 天前
绕过系统 ICMP:用 rawsock、Npcap 和 WMI 找到默认网卡
开发语言·arm开发·rust