---@meta _

---Taken from https://github.com/neovim/neovim/blob/master/src/nvim/auevents.lua
---@alias vim.Event vim.VimEvent|vim.NeovimEvent

---@alias vim.VimEvent
---| '"BufAdd"' # after adding a buffer to the buffer list
---| '"BufCreate"' # Bufadd
---| '"BufDelete"' # deleting a buffer from the buffer list
---| '"BufEnter"' # after entering a buffer
---| '"BufFilePost"' # after renaming a buffer
---| '"BufFilePre"' # before renaming a buffer
---| '"BufHidden"' # just after buffer becomes hidden
---| '"BufLeave"' # before leaving a buffer
---| '"BufModifiedSet"' # after the 'modified' state of a buffer changes
---| '"BufNew"' # after creating any buffer
---| '"BufNewFile"' # when creating a buffer for a new file
---| '"BufReadCmd"' # read buffer using command
---| '"BufReadPost"' # after reading a buffer
---| '"BufRead"' # BufReadPost
---| '"BufReadPre"' # before reading a buffer
---| '"BufUnload"' # just before unloading a buffer
---| '"BufWinEnter"' # after showing a buffer in a window
---| '"BufWinLeave"' # just after buffer removed from window
---| '"BufWipeout"' # just before really deleting a buffer
---| '"BufWriteCmd"' # write buffer using command
---| '"BufWritePost"' # after writing a buffer
---| '"BufWritePre"' # before writing a buffer
---| '"BufWrite"' # BufWritePre
---| '"ChanInfo"' # info was received about channel
---| '"ChanOpen"' # channel was opened
---| '"CmdUndefined"' # command undefined
---| '"CmdlineChanged"' # command line was modified
---| '"CmdlineEnter"' # after entering cmdline mode
---| '"CmdlineLeave"' # before leaving cmdline mode
---| '"CmdlineLeavePre"' # just before leaving the command line
---| '"CmdwinEnter"' # after entering the cmdline window
---| '"CmdwinLeave"' # before leaving the cmdline window
---| '"ColorScheme"' # after loading a colorscheme
---| '"ColorSchemePre"' # before loading a colorscheme
---| '"CompleteChanged"' # after popup menu changed
---| '"CompleteDone"' # after finishing insert complete
---| '"CompleteDonePre"' # idem, before clearing info
---| '"CursorHold"' # cursor in same position for a while
---| '"CursorHoldI"' # idem, in Insert mode
---| '"CursorMoved"' # cursor was moved
---| '"CursorMovedC"' # cursor was moved in Cmdline mode
---| '"CursorMovedI"' # cursor was moved in Insert mode
---| '"DiagnosticChanged"' # diagnostics in a buffer were modified
---| '"DiffUpdated"' # diffs have been updated
---| '"DirChanged"' # directory changed
---| '"DirChangedPre"' # directory is going to change
---| '"EncodingChanged"' # after changing the 'encoding' option
---| '"FileEncoding"' # EncodingChanged
---| '"ExitPre"' # before exiting
---| '"FileAppendCmd"' # append to a file using command
---| '"FileAppendPost"' # after appending to a file
---| '"FileAppendPre"' # before appending to a file
---| '"FileChangedRO"' # before first change to read-only file
---| '"FileChangedShell"' # after shell command that changed file
---| '"FileChangedShellPost"' # after (not) reloading changed file
---| '"FileReadCmd"' # read from a file using command
---| '"FileReadPost"' # after reading a file
---| '"FileReadPre"' # before reading a file
---| '"FileType"' # new file type detected (user defined)
---| '"FileWriteCmd"' # write to a file using command
---| '"FileWritePost"' # after writing a file
---| '"FileWritePre"' # before writing a file
---| '"FilterReadPost"' # after reading from a filter
---| '"FilterReadPre"' # before reading from a filter
---| '"FilterWritePost"' # after writing to a filter
---| '"FilterWritePre"' # before writing to a filter
---| '"FocusGained"' # got the focus
---| '"FocusLost"' # lost the focus to another app
---| '"FuncUndefined"' # if calling a function which doesn't exist
---| '"GUIEnter"' # after starting the GUI
---| '"GUIFailed"' # after starting the GUI failed
---| '"InsertChange"' # when changing Insert/Replace mode
---| '"InsertCharPre"' # before inserting a char
---| '"InsertEnter"' # when entering Insert mode
---| '"InsertLeave"' # just after leaving Insert mode
---| '"InsertLeavePre"' # just before leaving Insert mode
---| '"LspAttach"' # after an LSP client attaches to a buffer
---| '"LspDetach"' # after an LSP client detaches from a buffer
---| '"LspNotify"' # after an LSP notice has been sent to the server
---| '"LspProgress"' # after a LSP progress update
---| '"LspRequest"' # after an LSP request is started, canceled, or completed
---| '"LspTokenUpdate"' # after a visible LSP token is updated
---| '"MenuPopup"' # just before popup menu is displayed
---| '"ModeChanged"' # after changing the mode
---| '"OptionSet"' # after setting any option
---| '"QuickFixCmdPost"' # after :make, :grep etc.
---| '"QuickFixCmdPre"' # before :make, :grep etc.
---| '"QuitPre"' # before :quit
---| '"PackChangedPre"' # before trying to change state of `vim.pack` plugin
---| '"PackChanged"' # after changing state of `vim.pack` plugin
---| '"RecordingEnter"' # when starting to record a macro
---| '"RecordingLeave"' # just before a macro stops recording
---| '"RemoteReply"' # upon string reception from a remote vim
---| '"SafeState"' # going to wait for a character
---| '"SearchWrapped"' # after the search wrapped around
---| '"SessionLoadPost"' # after loading a session file
---| '"SessionWritePost"' # after writing a session file
---| '"ShellCmdPost"' # after ":!cmd"
---| '"ShellFilterPost"' # after ":1,2!cmd", ":w !cmd", ":r !cmd".
---| '"Signal"' # after nvim process received a signal
---| '"SourceCmd"' # sourcing a Vim script using command
---| '"SourcePost"' # after sourcing a Vim script
---| '"SourcePre"' # before sourcing a Vim script
---| '"SpellFileMissing"' # spell file missing
---| '"StdinReadPost"' # after reading from stdin
---| '"StdinReadPre"' # before reading from stdin
---| '"SwapExists"' # found existing swap file
---| '"Syntax"' # syntax selected
---| '"TabClosed"' # a tab has closed
---| '"TabEnter"' # after entering a tab page
---| '"TabLeave"' # before leaving a tab page
---| '"TabNew"' # when creating a new tab
---| '"TabNewEntered"' # after entering a new tab
---| '"TermChanged"' # after changing 'term'
---| '"TermClose"' # after the process exits
---| '"TermEnter"' # after entering Terminal mode
---| '"TermLeave"' # after leaving Terminal mode
---| '"TermOpen"' # after opening a terminal buffer
---| '"TermRequest"' # after an unhandled OSC sequence is emitted
---| '"TermResponse"' # after setting "v:termresponse"
---| '"TextChanged"' # text was modified
---| '"TextChangedI"' # text was modified in Insert mode(no popup)
---| '"TextChangedP"' # text was modified in Insert mode(popup)
---| '"TextChangedT"' # text was modified in Terminal mode
---| '"TextYankPost"' # after a yank or delete was done (y, d, c)
---| '"UIEnter"' # after UI attaches
---| '"UILeave"' # after UI detaches
---| '"User"' # user defined autocommand
---| '"VimEnter"' # after starting Vim
---| '"VimLeave"' # before exiting Vim
---| '"VimLeavePre"' # before exiting Vim and writing ShaDa file
---| '"VimResized"' # after Vim window was resized
---| '"VimResume"' # after Nvim is resumed
---| '"VimSuspend"' # before Nvim is suspended
---| '"WinClosed"' # after closing a window
---| '"WinEnter"' # after entering a window
---| '"WinLeave"' # before leaving a window
---| '"WinNew"' # when entering a new window
---| '"WinResized"' # after a window was resized
---| '"WinScrolled"' # after a window was scrolled or resized

---@alias vim.NeovimEvent
---| '"BufModifiedSet"'
---| '"DiagnosticChanged"'
---| '"LspAttach"'
---| '"LspDetach"'
---| '"LspNotify"'
---| '"LspProgress"'
---| '"LspRequest"'
---| '"LspTokenUpdate"'
---| '"PackChangedPre"'
---| '"PackChanged"'
---| '"RecordingEnter"'
---| '"RecordingLeave"'
---| '"Signal"'
---| '"TabNewEntered"'
---| '"TermClose"'
---| '"TermOpen"'
---| '"TermRequest"'
---| '"UIEnter"'
---| '"UILeave"'
