wilder.nvim —— vim、nvim cmdline增强

wilder.nvim —— vim、nvim cmdline增强

avatar

项目地址: https://github.com/gelguy/wilder.nvim

feature:

  • 优化 : cmdline能力 支持过滤、模糊筛选、历史查看等
  • 优化 / 搜索能力

usage

1
2
3
4
5
6
7
-- packer 最小化配置
use {
"gelguy/wilder.nvim",
config = function()
require('wilder').setup({ modes = { ':', '/', '?' } })
end
}

进阶使用

痛点

  • 无法使用上下键选择
  • 如果上下键选择的是候选项 但无法像以前那样选择历史命令

解决

  • 将上下键设置为wilder#next 和 previous
  • 当无输入时 直接展示历史命令
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
-- packer 推荐配置
use {
"gelguy/wilder.nvim",
event = 'CmdlineEnter', -- 懒加载:首次进入cmdline时载入
config = function()
local wilder = require('wilder')
wilder.setup({
modes = { ':', '/', '?' },
next_key = 0, previous_key = 0, reject_key = 0, accept_key = 0
})
vim.api.nvim_command("silent! UpdateRemotePlugins") -- 需要载入一次py依赖 不然模糊过滤等失效
-- 设置source
wilder.set_option('pipeline', {
wilder.branch(
-- 当默认无输入时 展示15条历史记录
{
wilder.check(function (_, x) return vim.fn.empty(x) end),
wilder.history(15)
},
-- 当输入时 展示所有匹配项(模糊匹配)
wilder.cmdline_pipeline({
fuzzy = 1,
fuzzy_filter = wilder.vim_fuzzy_filter()
}),
-- pipeline for search
wilder.search_pipeline()
),
})
-- 设置样式
wilder.set_option('renderer', wilder.popupmenu_renderer(
wilder.popupmenu_border_theme({
-- 设置特定高亮
highlights = {
accent = "WilderAccent",
selected_accent = "WilderSelectedAccent",
},
highlighter = wilder.basic_highlighter(),
left = { ' ', wilder.popupmenu_devicons() }, -- 左侧加入icon
right = { ' ', wilder.popupmenu_scrollbar() }, -- 右侧加入滚动条
border = 'rounded',
max_height = 17 -- 最大高度限制 因为要计算上下 所以17支持最多15个选项
})
))
-- 设置高亮
vim.api.nvim_set_hl(0, 'WilderAccent', { fg = '#5f87ff' })
vim.api.nvim_set_hl(0, 'WilderSelectedAccent', { fg = '#5f87ff', bg = '#4e4e4e' })
-- 设置快捷键
vim.api.nvim_set_keymap('c', '<tab>', [[wilder#in_context() ? wilder#next() : '<tab>']], { noremap = true, expr = true })
vim.api.nvim_set_keymap('c', '<Down>', [[wilder#in_context() ? wilder#next() : '<down>']], { noremap = true, expr = true })
vim.api.nvim_set_keymap('c', '<up>', [[wilder#in_context() ? wilder#previous() : '<up>']], { noremap = true, expr = true })
vim.api.nvim_set_keymap('c', '0', '0', {}) -- 不清楚原因导致0无法使用 强制覆盖
end
}

wilder.nvim —— vim、nvim cmdline增强
https://yaocc.cc/wilder-nvim/
作者
Yaocan Chen
发布于
2023年3月14日
许可协议