-
Notifications
You must be signed in to change notification settings - Fork 187
/
mini.txt
386 lines (309 loc) · 19.7 KB
/
mini.txt
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
*mini.nvim* Collection of minimal, independent and fast Lua modules
MIT License Copyright (c) 2021 Evgeni Chasnovski
==============================================================================
|mini.nvim| is a collection of minimal, independent, and fast Lua modules
dedicated to improve Neovim (version 0.7 and higher) experience. Each
module can be considered as a separate sub-plugin.
Table of contents:
General overview ............................................... |mini.nvim|
Disabling recipes ............................ |mini.nvim-disabling-recipes|
Buffer-local config ........................ |mini.nvim-buffer-local-config|
Plugin colorschemes ................................... |mini-color-schemes|
Extend and create a/i textobjects ................................ |mini.ai|
Align text interactively ...................................... |mini.align|
Animate common Neovim actions ............................... |mini.animate|
Base16 colorscheme creation .................................. |mini.base16|
Common configuration presets ................................. |mini.basics|
Go forward/backward with square brackets .................. |mini.bracketed|
Remove buffers ............................................ |mini.bufremove|
Show next key clues ............................................ |mini.clue|
Tweak and save any color scheme .............................. |mini.colors|
Comment lines ............................................... |mini.comment|
Completion and signature help ............................ |mini.completion|
Autohighlight word under cursor .......................... |mini.cursorword|
Plugin manager ................................................. |mini.deps|
Work with diff hunks ........................................... |mini.diff|
Generate Neovim help files ...................................... |mini.doc|
Extra 'mini.nvim' functionality ............................... |mini.extra|
Navigate and manipulate file system............................ |mini.files|
Fuzzy matching ................................................ |mini.fuzzy|
Git integration ................................................. |mini.git|
Highlight patterns in text ............................... |mini.hipatterns|
Generate configurable color scheme ............................. |mini.hues|
Icon provider ................................................. |mini.icons|
Visualize and work with indent scope .................... |mini.indentscope|
Jump to next/previous single character ......................... |mini.jump|
Jump within visible lines .................................... |mini.jump2d|
Window with buffer text overview ................................ |mini.map|
Miscellaneous functions ........................................ |mini.misc|
Move any selection in any direction ............................ |mini.move|
Show notifications ........................................... |mini.notify|
Text edit operators ....................................... |mini.operators|
Autopairs ..................................................... |mini.pairs|
Pick anything .................................................. |mini.pick|
Session management ......................................... |mini.sessions|
Split and join arguments .................................. |mini.splitjoin|
Start screen ................................................ |mini.starter|
Statusline ............................................... |mini.statusline|
Surround actions ........................................... |mini.surround|
Tabline ..................................................... |mini.tabline|
Test Neovim plugins ............................................ |mini.test|
Trailspace (highlight and remove)......................... |mini.trailspace|
Track and reuse file system visits ........................... |mini.visits|
# General principles ~
- <Design>. Each module is designed to solve a particular problem targeting
balance between feature-richness (handling as many edge-cases as
possible) and simplicity of implementation/support. Granted, not all of
them ended up with the same balance, but it is the goal nevertheless.
- <Independence>. Modules are independent of each other and can be run
without external dependencies. Although some of them may need
dependencies for full experience.
- <Structure>. Each module is a submodule for a placeholder "mini" module. So,
for example, "surround" module should be referred to as "mini.surround".
As later will be explained, this plugin can also be referred to
as "MiniSurround".
- <Setup>:
- Each module you want to use should be enabled separately with
`require(<name of module>).setup({})`. Possibly replace `{}` with
your config table or omit altogether to use defaults. You can supply
only parts of config, the rest will be inferred from defaults.
- Call to module's `setup()` always creates a global Lua object with
coherent camel-case name: `require('mini.surround').setup()` creates
`_G.MiniSurround`. This allows for a simpler usage of plugin
functionality: instead of `require('mini.surround')` use
`MiniSurround` (or manually `:lua MiniSurround.*` in command line);
available from `v:lua` like `v:lua.MiniSurround`. Considering this,
"module" and "Lua object" names can be used interchangeably:
'mini.surround' and 'MiniSurround' will mean the same thing.
- Each supplied `config` table (after extending with default values) is
stored in `config` field of global object. Like `MiniSurround.config`.
- Values of `config`, which affect runtime activity, can be changed on
the fly to have effect. For example, `MiniSurround.config.n_lines`
can be changed during runtime; but changing
`MiniSurround.config.mappings` won't have any effect (as mappings are
created once during `setup()`).
- <Buffer local configuration>. Each module can be additionally configured
to use certain runtime config settings locally to buffer.
See |mini.nvim-buffer-local-config| for more information.
- <Disabling>. Each module's core functionality can be disabled globally or
locally to buffer. See "Disabling" section in module's help page for more
details. See |mini.nvim-disabling-recipes| for common recipes.
- <Silencing>. Each module can be configured to not show non-error feedback
globally or locally to buffer. See "Silencing" section in module's help page
for more details.
- <Highlighting>. Appearance of module's output is controlled by certain set
of highlight groups (see |highlight-groups|). By default they usually link to
some semantically close built-in highlight group. Use |:highlight| command
or |nvim_set_hl()| Lua function to customize highlighting.
To see a more calibrated look, use |MiniHues|, |MiniBase16|, or plugin's
colorschemes.
- <Stability>. Each module upon release is considered to be relatively
stable: both in terms of setup and functionality. Any non-bugfix
backward-incompatible change will be released gradually as much as possible.
# List of modules ~
- |MiniAi| - extend and create `a`/`i` textobjects (like in `di(` or
`va"`). It enhances some builtin |text-objects| (like |a(|, |a)|, |a'|,
and more), creates new ones (like `a*`, `a<Space>`, `af`, `a?`, and
more), and allows user to create their own (like based on treesitter, and
more). Supports dot-repeat, `v:count`, different search methods,
consecutive application, and customization via Lua patterns or functions.
Has builtins for brackets, quotes, function call, argument, tag, user
prompt, and any punctuation/digit/whitespace character.
- |MiniAlign| - align text interactively (with or without instant preview).
Allows rich and flexible customization of both alignment rules and user
interaction. Works with charwise, linewise, and blockwise selections in
both Normal mode (on textobject/motion; with dot-repeat) and Visual mode.
- |MiniAnimate| - animate common Neovim actions. Has "works out of the box"
builtin animations for cursor movement, scroll, resize, window open and
close. All of them can be customized and enabled/disabled independently.
- |MiniBase16| - fast implementation of base16 theme for manually supplied
palette. Supports 30+ plugin integrations. Has unique palette generator
which needs only background and foreground colors.
- |MiniBasics| - common configuration presets. Has configurable presets for
options, mappings, and autocommands. It doesn't change option or mapping
if it was manually created.
- |MiniBracketed| - go forward/backward with square brackets. Among others,
supports variety of non-trivial targets: comments, files on disk, indent
changes, tree-sitter nodes, linear undo states, yank history entries.
- |MiniBufremove| - buffer removing (unshow, delete, wipeout) while saving
window layout.
- |MiniClue| - show next key clues. Implements custom key query process with
customizable opt-in triggers, next key descriptions (clues), hydra-like
submodes, window delay/config. Provides clue sets for some built-in
concepts: `g`/`z` keys, window commands, etc.
- |MiniColors| - tweak and save any color scheme. Can create colorscheme
object with methods to invert/set/modify/etc.
lightness/saturation/hue/temperature/etc. of foreground/background/all
colors, infer cterm attributes, add transparency, save to a file and more.
Has functionality for interactive experiments and animation of
transition between color schemes.
- |MiniComment| - fast and familiar per-line code commenting.
- |MiniCompletion| - async (with customizable 'debounce' delay) 'two-stage
chain completion': first builtin LSP, then configurable fallback. Also
has functionality for completion item info and function signature (both
in floating window appearing after customizable delay).
- |MiniCursorword| - automatic highlighting of word under cursor (displayed
after customizable delay). Current word under cursor can be highlighted
differently.
- |MiniDeps| - plugin manager for plugins outside of 'mini.nvim'. Uses Git and
built-in packages to install, update, clean, and snapshot plugins.
- |MiniDiff| - visualize difference between buffer text and its reference
interactively (with colored signs or line numbers). Uses Git index as
default reference. Provides toggleable overview in text area, built-in
apply/reset/textobject/goto mappings.
- |MiniDoc| - generation of help files from EmmyLua-like annotations.
Allows flexible customization of output via hook functions. Used for
documenting this plugin.
- |MiniExtra| - extra 'mini.nvim' functionality. Contains 'mini.pick' pickers,
'mini.ai' textobjects, and more.
- |MiniFiles| - navigate and manipulate file system. A file explorer with
column view capable of manipulating file system by editing text. Can
create/delete/rename/copy/move files/directories inside and across
directories. For full experience needs enabled |MiniIcons| module (but works
without it).
- |MiniFuzzy| - functions for fast and simple fuzzy matching. It has
not only functions to perform fuzzy matching of one string to others, but
also a sorter for |telescope.nvim|.
- |MiniGit| - Git integration (https://git-scm.com/). Implements tracking of
Git related data (root, branch, etc.), |:Git| command for better integration
with running Neovim instance, and various helpers to explore Git history.
- |MiniHipatterns| - highlight patterns in text with configurable highlighters
(pattern and/or highlight group can be string or callable).
Works asynchronously with configurable debounce delay.
- |MiniHues| - generate configurable color scheme. Takes only background
and foreground colors as required arguments. Can adjust number of hues
for non-base colors, saturation, accent color, plugin integration.
- |MiniIcons| - icon provider with fixed set of highlight groups.
Supports various categories, icon and style customizations, caching for
performance. Integrates with Neovim's filetype matching.
- |MiniIndentscope| - visualize and operate on indent scope. Supports
customization of debounce delay, animation style, and different
granularity of options for scope computing algorithm.
- |MiniJump| - minimal and fast module for smarter jumping to a single
character.
- |MiniJump2d| - minimal and fast Lua plugin for jumping (moving cursor)
within visible lines via iterative label filtering. Supports custom jump
targets (spots), labels, hooks, allowed windows and lines, and more.
- |MiniMap| - window with buffer text overview, scrollbar, and highlights.
Allows configurable symbols for line encode and scrollbar, extensible
highlight integration (with pre-built ones for builtin search, diagnostic,
git line status), window properties, and more.
- |MiniMisc| - collection of miscellaneous useful functions. Like `put()`
and `put_text()` which print Lua objects to command line and current
buffer respectively.
- |MiniMove| - move any selection in any direction. Supports any Visual
mode (charwise, linewise, blockwise) and Normal mode (current line) for
all four directions (left, right, down, up). Respects `count` and undo.
- |MiniNotify| - show one or more highlighted notifications in a single window.
Provides both low-level functions (add, update, remove, clear) and maker
of |vim.notify()| implementation. Sets up automated LSP progress updates.
- |MiniOperators| - various text edit operators: replace, exchange,
multiply, sort, evaluate. Creates mappings to operate on textobject,
line, and visual selection. Supports |[count]| and dot-repeat.
- |MiniPairs| - autopairs plugin which has minimal defaults and
functionality to do per-key expression mappings.
- |MiniPick| - general purpose interactive non-blocking picker with
toggleable preview. Has fast default matching with fuzzy/exact/grouped
modes. Provides most used built-in pickers for files, pattern matches,
buffers, etc. For full experience needs enabled |MiniIcons| module (but
works without it).
- |MiniSessions| - session management (read, write, delete) which works
using |mksession|. Implements both global (from configured directory) and
local (from current directory) sessions.
- |MiniSplitjoin| - split and join arguments (regions inside brackets
between allowed separators). Has customizable pre and post hooks.
Works inside comments.
- |MiniStarter| - minimal, fast, and flexible start screen. Displayed items
are fully customizable both in terms of what they do and how they look
(with reasonable defaults). Item selection can be done using prefix query
with instant visual feedback.
- |MiniStatusline| - minimal and fast statusline. Has ability to use custom
content supplied with concise function (using module's provided section
functions) along with builtin default. For full experience needs
enabled |MiniDiff|, |MiniGit|, and |MiniIcons| modules (but works without
any of them).
- |MiniSurround| - fast and feature-rich surround plugin. Add, delete,
replace, find, highlight surrounding (like pair of parenthesis, quotes,
etc.). Supports dot-repeat, `v:count`, different search methods,
"last"/"next" extended mappings, customization via Lua patterns or
functions, and more. Has builtins for brackets, function call, tag, user
prompt, and any alphanumeric/punctuation/whitespace character.
- |MiniTest| - framework for writing extensive Neovim plugin tests.
Supports hierarchical tests, hooks, parametrization, filtering (like from
current file or cursor position), screen tests, "busted-style" emulation,
customizable reporters, and more. Designed to be used with provided
wrapper for managing child Neovim processes.
- |MiniTabline| - minimal tabline which always shows listed (see 'buflisted')
buffers. Allows showing extra information section in case of multiple vim
tabpages. For full experience needs enabled |MiniIcons| module (but works
without it).
- |MiniTrailspace| - automatic highlighting of trailing whitespace with
functionality to remove it.
- |MiniVisits| - track and reuse file system visits. Tracks data about each
file/directory visit (after delay) and stores it (only) locally. This can be
used to get a list of "recent"/"frequent"/"frecent" visits.
Allows persistently adding labels to visits enabling flexible workflow.
------------------------------------------------------------------------------
*mini.nvim-disabling-recipes*
Common recipes for disabling functionality
Each module's core functionality can be disabled globally or buffer-locally
by creating appropriate global or buffer-scoped variables equal to |v:true|.
Functionality is disabled if at least one of |g:| or |b:| variables is `v:true`.
Variable names have the same structure: `{g,b}:mini*_disable` where `*` is
module's lowercase name. For example, `g:minianimate_disable` disables
|mini.animate| globally and `b:minianimate_disable` - for current buffer.
Note: in this section disabling 'mini.animate' is used as example;
everything holds for other module variables.
Considering high number of different scenarios and customization intentions,
writing exact rules for disabling module's functionality is left to user.
# Manual disabling ~
>lua
-- Disable globally
vim.g.minianimate_disable = true
-- Disable for current buffer
vim.b.minianimate_disable = true
-- Toggle (disable if enabled, enable if disabled)
vim.g.minianimate_disable = not vim.g.minianimate_disable -- globally
vim.b.minianimate_disable = not vim.b.minianimate_disable -- for buffer
<
# Automated disabling ~
Automated disabling is suggested to be done inside autocommands: >lua
-- Disable for a certain filetype (for example, "lua")
local f = function(args) vim.b[args.buf].minianimate_disable = true end
vim.api.nvim_create_autocmd('Filetype', { pattern = 'lua', callback = f })
-- Enable only for certain filetypes (for example, "lua" and "help")
local f = function(args)
local ft = vim.bo[args.buf].filetype
if ft == 'lua' or ft == 'help' then return end
vim.b[args.buf].minianimate_disable = true
end
vim.api.nvim_create_autocmd('Filetype', { callback = f })
-- Disable in Visual mode
local f_en = function(args) vim.b[args.buf].minianimate_disable = false end
local enable_opts = { pattern = '[vV\x16]*:*', callback = f_en }
vim.api.nvim_create_autocmd('ModeChanged', enable_opts)
local f_dis = function(args) vim.b[args.buf].minianimate_disable = true end
local disable_opts = { pattern = '*:[vV\x16]*', callback = f_dis }
vim.api.nvim_create_autocmd('ModeChanged', disable_opts)
-- Disable in Terminal buffer
local f = function(args) vim.b[args.buf].minianimate_disable = true end
vim.api.nvim_create_autocmd('TermOpen', { callback = f })
<
------------------------------------------------------------------------------
*mini.nvim-buffer-local-config*
Buffer local config
Each module can be additionally configured locally to buffer by creating
appropriate buffer-scoped variable with values you want to override. It
will affect only runtime options and not those used once during setup (like
`mappings` or `set_vim_settings`).
Variable names have the same structure: `b:mini*_config` where `*` is
module's lowercase name. For example, `b:minianimate_config` can store
information about how |mini.animate| will act inside current buffer. Its
value should be a table with same structure as module's `config`. Example: >lua
-- Disable scroll animation in current buffer
vim.b.minianimate_config = { scroll = { enable = false } }
<
Considering high number of different scenarios and customization intentions,
writing exact rules for module's buffer local configuration is left to
user. It is done in similar fashion to |mini.nvim-disabling-recipes|.
vim:tw=78:ts=8:noet:ft=help:norl: