This is a collection of small plugins that I created just because.
I don't plan on doing good maintenance, so I might change things without warning.
Some of the plugins are a complete hack while others are top quality
The documentation is not up to date.
Optional dependencies:
nvim-telescope/telescope.nvim: many plugins use a selectorrcarriga/nvim-notifyor something similar: many plugins usevim.notify
Summary: Simple flash cursor at pos. 
Commands:
beacon.flashflashes the cursorbeacon.create_autocmdreturns an autocmd to flash the cursor on move
Config:
beacon.conf.intervalms between flashesbeacon.conf.counthow many flashesbeacon.conf.colorcolor of flash (may be #rgb or color-name)beacon.conf.minimalminimal size of move to flash cursor
Rewrite into normal plugin: https://github.com/altermo/beacon.nvim
Summary: Bottombar shows information in the bottom right corner.
Setup: bottombar.setup()
Summary: Bufend makes it easy to quickly goto a specific file in your file system. 
Commands: bufend.run()
Pseudocode explanation: of what bufend.run() does
char=getchar()
if char=='<esc>':return
elif char=='<tab>':
    set_mark(getchar(),select_file_from_opend())
elif char=='<bs>':
    del_mark(getchar())
elif char=='<cr>':
    edit(select_file_from_opend())
else:
    if marks[char]:
        edit(marks[char])
    elif (files:=get_opened_file_with_starting_char(char)):
        edit(files[0] if len(files)==1 or select(files))
    else:
        edit(select(get_files_with_starting_char(char)))Optional: python,mojo,fish,lua5.1,fennel,dotnet,rust,zig (used also for c/c++),make 
Summary: Basically, a simple run file system. 
Commands:
builder.termbuildruns the file in the terminalbuilder.evalevaluates the file as vim codebuilder.swapswap commonly used runners (likerustcandcargo run)builder.setset the builder for the current filetype
Config:
builder.conf.buildersa table of builders, (see source code)
Required: some chat program that has a bin chat
Summary: Runs chat in buffer
Commands: chat.run()
Summary: Run insert mappings (like nvim-autopairs) in the cmdline 
Commands:
cmd2ins.map(key)run key from command mode in insert mode
Summary: Color the cmdline 
Setup: color_cmdline.setup() 
NOTE: it uses some internal things (which are only there for testing) to accomplish this
Summary: slowly shifts between two colors 
Commands: color_shift.shift(to_colorscheme,time,steps?)
Summary: shift r, g or b by amount 
Commands: colorfn.run()
Summary: select between colors (offline and online) 
Commands:
colors.search_colors: search colors in runtimepathcolors.search_colors_online: search colors on neovimcraft.com
Summary: minimal yankring
Setup: copyring.setup()
Summary: Create multiple cursors 
Setup: cursor.setup() 
Commands:
cursor.create_cursor()create a cursorcursor.goto_next_cursor(create_cursor)goes to next cursor, ifcreate_cursoris true, creates a cursor before jumpingclear_cursorclears the cursors in current buffer
Summary: xray current buffer if cursor covered by floating window 
Setup: cursor_xray.setup()
Summary: Similar to osv.run_this but opens nvim instance in a terminal buffer
Requires: nvim-dap, one-small-step-for-vimkind 
Commands:
dapnvim.start: Runs osv inside a new neovim instance and opens instance in new window
Summary: Open a debugger buffer on error
Commands:
debugger.error(): run the debugger
debugger.override_error(): replace normal error with the debugger
Summary: The hop/leap/flash style selector + a file explorer (not manager).
Commands:
dff.file_expl(dir?)opens a dff file selector. Use<esc>to quit.
Pseudocode explanation: of how the dff algorithm works
items=get_items()
col=0
while len(items)!=1:
    char_at_col=items[0][col]
    while all(map(lambda x:x[col]==char_at_col,items)):
        col=col+1
    char=getchar()
    if char=='<esc>':break
    items=filter(lambda x:x[col]==char,items)Summary: elastic tabstop. info 
Setup: elastic_tabstop.setup()
Summary: Exchange two selected regions. 
Commands:
exchange.ex_line()exchange current lineexchange.ex_oper()exchange operatorexchange.ex_visual()exchange visualexchange.ex_eol()exchange to end of lineexchange.ex_cancel()cancel exchange
Keymap (example):
vim.keymap.set('n','cx',exchange.ex_oper)
vim.keymap.set('n','cX',exchange.ex_eol)
vim.keymap.set('n','cxx',exchange.ex_line)
vim.keymap.set('n','cxc',exchange.ex_cancel)
vim.keymap.set('x','X',exchange.ex_visual)Summary: A faster way to do multiple finds Commands:
fastmultif.find: run fastmultif forwardsfastmultif.rfind: run fastmultif backwards Config:fastmultif.conf.labelslabels to use
Summary: luay but for fend. 
Commands: fendy.run()
Required: netrw 
Summary: Filetree using netrw 
Setup filetree.setup() (only changes netrw options) 
Commands: filetree.toggle()
Summary: create, move and resize floating windows, use ctrl-mouse to move/resize windows 
Setup: float.setup() 
Commands:
float.make_floating(win,opt)make win floating
Config:
float.conf.make_non_float_float_on_dragwhen dragging non-floating window, make it floating
Summary: Select from folds using vim.ui.select. 
Commands: foldselect.run()
Summary: A simple foldtext. 
Setup: foldtext.setup()
Config:
foldtext.conf.treesitterwhether to use treesitter Highlighting
Summary: format file with formatter if config exist, fallback lsp.format. 
Commands: format.run()
Summary: Try to get help from current word. 
Commands: help_cword.run()
Required: ctags
Summary: Generates tag with the prefix readme- from readme files (so that you can :help readme-*). 
Setup: help_readme.setup() 
Commands:
help_readme.generate()generate tag file from readme to path
Config:
help_readme.conf.pathwhere the readmes/tagfile is put
Summary: Highlight matching selected text in visual mode. 
Setup: highlight_selected.setup()
Summary: rewrite of emacs-iedit in neovim 
Commands:
iedit.visual_all()run iedit on current visual selectioniedit.visual_select()interactive select and iedit on current visual selection
Rewrite into normal plugin: https://github.com/altermo/iedit.nvim
Summary: ctrl-a/x but also dates. Commands:
incdec.inc()increment valueincdec.dec()decrement value
Summary: Synchronize with kitty terminal
NOTE: Can't be configured yet.
Setup: kitty.setup()
Inspired by: longbow 
Summary: Using 2 length de Bruijn sequence jump to anywhere without problem.
Commands: jumpall.run() 
Config:
jumpall.conf.labelslabels to use for jumping
Summary: Auto adds bullets for bullet-list.
Commands: labull.run() (map-expr)
Keymap (example):
vim.keymap.set('n','o',labull.run,{expr=true})Summary: Makes letters large.
Commands:
labull.start(): makes letters large (NOTE: does not have astop)
Summary: Save and load current tabpage layout. 
Commands:
layout.save()save current tabpage layout to pathlayout.load()load tabpage layout from path
Config:
layout.conf.savepathpath to save the layout
Inspired by: pyro 
Summary: Code based replace file wide. 
Commands: lbpr.run() 
NOTE:
:writeon script buf to run script.:writeon preview buf to save changes.
Inspired by: luapad 
Summary: a minimal version of luapad. 
Commands: luay.run()
Summary: A simple macro plugin 
Commands:
macro.toggle_rec(): toggle the recoding of macromacro.play_rec(): play the macromacro.edit_rec(): edit the macro
Summary: Match current word + vim.lsp.buf.document_highlight
Setup: matchall.setup()
Required: treesitter
Summary: Evaluate node with bin 
Setup: node_eval.setup()
Config:
node_eval.conf.nodethe node type to evaluatenode_eval.conf.binthe bin to evaluate withnode_eval.conf.handlethe function to handle the outputnode_eval.conf.pre_handlethe function to do stuff before running the bin (not required)
Required: treesitter
Summary: Smarter node swap 
Commands:
nodeswap.swap_next()swap with next nodenodeswap.swap_prev()swap with prev nodenodeswap.over()undo swap and swap with parent node
Config:
nodeswap.conf.nodeswhich tsnodes should be considered as nodes
summary: a rewrite of fidget.nvim
Commands:
notify.notify(msg,level,opts)do a notifynotify.open_history()open the history in a new buffernotify.override_notify()overridevim.notifynotify.dismiss()dismiss the current notifications
Config:
notify.conf.style: what styles to use for which levelnotify.conf.fallback_notify: fallback notify (not used)notify.conf.timeout=2000: time until notification closesnotify.conf.historysize=100: the size of history
Summary: Run terminal or use neovim as a terminal.
Commands:
nterm.run(cmd?,smart_quit_nvim?)creates a new terminalcmd?: the cmd to run, defaults to&shellsmart_quit_nvim?: if is the only buffer open, quits neovim
Example: Here is an example of how to use neovim-qt as a terminal:
nvim-qt -- -c "lua require'small.nterm'.run(nil,true)"Optional: treesitter 
Summary: Toggle comments out the text, can detect filetype with treesitter. 
Commands: onelinecomment.run() (map-expr) 
Keymap (example):
vim.keymap.set('x','gc',onelinecomment.run)
vim.keymap.set('n','gc',onelinecomment.run)Summary: Colorscheme
Required: curl 
Summary: Searches and download and inits plugins using nvim.sh 
Commands: plugin_search.run()
Summary: Quick run neovim 
Commands: qrun.run()
Summary: Quick run neovim (version 2) 
Commands: qrun.run()
Required: treesitter
Summary: rainbow pairs 
Setup: rainbow_pair.setup()\
Required: ranger 
Summary: simple ranger wrapper 
Commands: ranger.run(file?) 
Config:
ranger.conf.exit_if_single: exit neovim when quitting ranger if it is the only buffer
Summary: Works like emacs's (recenter-top-bottom) 
Commands: recenter_top_bottom()
Summary: Searches the reminder.conf.path for any bullet list with -, and a date (@YYYY-MM-DD HH:MM), and does a reminder when the time comes. 
Setup: reminder.setup()
Commands:
reminder.sidebar: open a sidebar with all the reminders
Config:
reminder.conf.path(required) file to find reminders in
Summary: Searches the reminder2.conf.path for any bullet list with -, and a date @YYYY-MM-DD, and does a reminder when the time comes.
Setup: reminder2.setup()
Commands:
reminder2.sidebar: open a sidebar with all the reminders
Config:
reminder2.conf.path(required) file to find reminders in
Summary: Remote control nvim from another neovim.
Run: remote.run()
Summary: A simple ruler. 
Setup: tabline.setup()
Summary: a lazy loader for small plugins.
Run: small_loade.run()
Summary: Run scripts on specific file opens.
Setup: specfile.setup()
Config:
specfile.conf.extwhich file ext runs which command namespecfile.conf.prgmcommand name to commandspecfile.conf.bigfilelimit the max file sizespecfile.conf.startinsertstart insert on term command
Summary: A replacement for :split and :vsplit.
Commands:
splitbuf.split(): splits thensplitbuf.open()splitbuf.vsplit()splits thensplitbuf.open()splitbuf.open(): Opens a window with some commands, if you press a key linked with the command, the command will run, otherwise the key will be sent to the buffer
Config:
splitbuf.conf.optionsa table of commands (see source code)splitbuf.conf.calla function which oveerides the default behaviour
Summary: Statusline in buffer (floating window)
Setup: statusbuf.setup
Summary: format markdown tables 
Commands: tablemode.run()
Summary: A simple tabline. 
Setup: tabline.setup()
Summary: Text-objs to get a row/column of the same character. 
Commands:
textobj.wordcolumnget same selected in column (map-expr)textobj.charcolumnget same char in column (map-expr)textobj.wordrowget same selected in row (map-expr)textobj.charrowget same char in row (map-expr) Keymap (example):
vim.keymap.set('x','im',textobj.wordcolumn,{expr=true})
vim.keymap.set('o','im',textobj.charcolumn,{expr=true})
vim.keymap.set('x','ik',textobj.wordrow,{expr=true})
vim.keymap.set('o','ik',textobj.charrow,{expr=true})Requires: translate-shell
Summary: Simple translation plugin.
Commands:
trans.cword()translate the current word
Config:
trans.conf.fromthe language to translate from (can be modified whenever)trans.conf.tothe language to translate to (can be modified whenever)
Required: treesitter
Summary: Split-join if/for/function_definition blocks
Commands: tree_lua_block_split_join.run()
Required: treesitter
Summary: Warn on some treesitter structures
Setup: treewarn.setup()
Config:
treewarn.conf[lang]: list of queries with the capture@warn; and to add custo messages:(#set! "mes" "...")
Required: treesitter
Summary: Similar to Helix's treesitter selection
Commands:
treeselect.current(): select current nodetreeselect.line(): select current node linewisetreeselect.base(): select one below root nodetreeselect.next(): select next nodetreeselect.prev(): select previous nodetreeselect.up(): select parent nodetreeselect.down(): select child node
Required: treesitter
Summary: parenthesise all nodes (containing multiple nodes)
Command: ts_paren.run()
Required: typos and or codespell
Summary: show code typos/codespells
Setup: typo.setup()
Summary: Goto next/previous file OR quickly change options
Commands:
unimpaired.edit_next_file(): edit next fileunimpaired.edit_prev_file(): edit prev fileset_opt: set option (and opens a preview window)
Summary: Vertical tabline
Setup: verttab.setup()
Summary: Basically:
function fun(arg|) end
--> :
---@param arg |
function fun(arg) end
--> -
---@param arg
function fun(arg|) endCommands: whint.run() (map-expr)
Keymap (example):
vim.keymap.set('i',':',whint.run,{expr=true})Inspired by: nvim-window-picker 
Summary: pick window by symbol 
Commands: winpick.pick()
Configs:
winpick.conf.colorcolor of winbar (may be #rgb or color-name)winpick.conf.symbolssymbols to use
Summary: Only show visual selection in current window. 
Setup: winvis.setup()
Summary: Simple zen 
Commands: zen.run()
Summary: Zen in all the windows (not just the current one). 
Setup: zenall.setup()
If you want to donate then you need to find the correct link (hint: chess-bird):