Skip to content

Instantly share code, notes, and snippets.

@aiya000
Last active July 31, 2025 17:07
Show Gist options
  • Save aiya000/90e6083c68239bfe6bbf4e89af9cdaa5 to your computer and use it in GitHub Desktop.
Save aiya000/90e6083c68239bfe6bbf4e89af9cdaa5 to your computer and use it in GitHub Desktop.
Type definition file when writing init.lua or Neovim plugin in lua-language-server
{
"$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json",
"Lua.runtime.version": "LuaJIT",
"Lua.diagnostics.globals": [
"vim"
],
"Lua.workspace.userThirdParty": [
"${workspaceFolder}/types"
],
"Lua.workspace.library": [
"${3rd}/luv/library",
"${workspaceFolder}/types"
],
"Lua.workspace.checkThirdParty": false,
"Lua.completion.callSnippet": "Replace"
}
--[[
Neovim API type definitions (generated from official documentation)
Reference: /usr/local/share/nvim/runtime/doc/lua.txt
Usage:
1. Put this file to {project-root}/types/vim.lua -- For example, {project-root} means ~/.config/nvim, a Neovim plugin project, or etc
2. Copy .luarc.json (See https://gist.github.com/aiya000/90e6083c68239bfe6bbf4e89af9cdaa5) to {project-root}/.luarc.json
--]]
---@class vim
---@field api vim.api
---@field fn vim.fn
---@field g table
---@field b table
---@field w table
---@field t table
---@field v table
---@field env table
---@field opt vim.opt
---@field opt_global vim.opt
---@field opt_local vim.opt
---@field o table
---@field go table
---@field bo table
---@field wo table
---@field cmd fun(command: string|table)
---@field defer_fn fun(fn: function, timeout: number): table
---@field schedule fun(fn: function)
---@field deprecate fun(name: string, alternative: string, version: string, plugin?: string, backtrace?: boolean)
---@field inspect fun(obj: any, opts?: table): string
---@field keycode fun(str: string): string
---@field notify fun(msg: string, level?: number, opts?: table)
---@field notify_once fun(msg: string, level?: number, opts?: table)
---@field print fun(...: any)
---@field split fun(s: string, sep: string, opts?: table): string[]
---@field join fun(sep: string, list: string[]): string
---@field trim fun(s: string): string
---@field startswith fun(s: string, prefix: string): boolean
---@field endswith fun(s: string, suffix: string): boolean
---@field tbl_deep_extend fun(behavior: string, ...: table): table
---@field tbl_extend fun(...: table): table
---@field tbl_islist fun(t: table): boolean
---@field tbl_isempty fun(t: table): boolean
---@field tbl_keys fun(t: table): any[]
---@field tbl_values fun(t: table): any[]
---@field system fun(cmd: string[], opts?: table): table
---@field wait fun(time: number, callback?: function, interval?: number, fast_only?: boolean): boolean, number
---@field log vim.log
---@field keymap vim.keymap
---@field fs vim.fs
---@field ui vim.ui
---@field hl vim.hl
---@field filetype vim.filetype
---@field spell vim.spell
---@field diff fun(a: string[], b: string[], opts?: table): table[]
---@field base64 vim.base64
---@field json vim.json
---@field mpack vim.mpack
---@field lsp vim.lsp
---@field diagnostic vim.diagnostic
---@field treesitter vim.treesitter
---@field glob vim.glob
---@field lpeg vim.lpeg
---@field loader vim.loader
---@field health vim.health
---@field NIL userdata
---@field type_idx number
---@field val_idx number
---@field types table
---@field empty_dict fun(): table
---@field iconv fun(str: string, from: string, to: string): string
---@field in_fast_event fun(): boolean
---@field rpcrequest fun(channel: number, method: string, ...: any): any
---@field rpcnotify fun(channel: number, method: string, ...: any)
---@field str_utf_end fun(str: string, index: number): number
---@field str_utf_start fun(str: string, index: number): number
---@field str_utf_pos fun(str: string): number[]
---@field stricmp fun(a: string, b: string): number
---@field ui_attach fun(ns: number, options: table, callback: function)
---@field ui_detach fun(ns: number)
---@field call fun(func: string|function, ...: any): any
---@field paste function|nil
---Neovim API Functions
---@class vim.api
---Vim Functions (See builtin.txt)
---@class vim.fn
---@field abs fun(expr: any): number
---@field acos fun(expr: number): number
---@field add fun(object: any[], expr: any): any[]
---@field and fun(expr: any, expr2: any): number
---@field api_info fun(): table
---@field append fun(lnum: number, text: string|string[]): number
---@field appendbufline fun(buf: any, lnum: number, text: string|string[]): number
---@field argc fun(winid?: number): number
---@field argidx fun(): number
---@field arglistid fun(winnr?: number, tabnr?: number): number
---@field argv fun(nr?: number, winid?: number): string|string[]
---@field asin fun(expr: number): number
---@field assert_beeps fun(cmd: string): any
---@field assert_equal fun(expected: any, actual: any, msg?: string): any
---@field assert_equalfile fun(fname_one: string, fname_two: string): any
---@field assert_exception fun(error: string, msg?: string): any
---@field assert_fails fun(cmd: string, error?: string, msg?: string, lnum?: number, context?: any): any
---@field assert_false fun(actual: any, msg?: string): any
---@field assert_inrange fun(lower: number, upper: number, actual: number, msg?: string): any
---@field assert_match fun(pattern: string, actual: string, msg?: string): any
---@field assert_nobeep fun(cmd: string): any
---@field assert_notequal fun(expected: any, actual: any, msg?: string): any
---@field assert_notmatch fun(pattern: string, actual: string, msg?: string): any
---@field assert_report fun(msg: string): any
---@field assert_true fun(actual: any, msg?: string): any
---@field atan fun(expr: number): number
---@field atan2 fun(expr1: number, expr2: number): number
---@field blob2list fun(blob: any): number[]
---@field browse fun(save: number, title: string, initdir: string, default: string): string
---@field browsedir fun(title: string, initdir: string): string
---@field bufadd fun(name: string): number
---@field bufexists fun(buf: any): number
---@field buflisted fun(buf: any): number
---@field bufload fun(buf: any): any
---@field bufloaded fun(buf: any): number
---@field bufname fun(buf?: any): string
---@field bufnr fun(buf?: any, create?: boolean): number
---@field bufwinid fun(buf: any): number
---@field bufwinnr fun(buf: any): number
---@field byte2line fun(byte: number): number
---@field byteidx fun(expr: string, nr: number, utf16?: boolean): number
---@field byteidxcomp fun(expr: string, nr: number, utf16?: boolean): number
---@field call fun(func: string|function, arglist: any[], dict?: table): any
---@field ceil fun(expr: number): number
---@field chanclose fun(id: number, stream?: string): number
---@field changenr fun(): number
---@field chansend fun(id: number, data: string|string[]): number
---@field char2nr fun(string: string, utf8?: boolean): number
---@field charclass fun(string: string): number
---@field charcol fun(expr: string, winid?: number): number
---@field charidx fun(string: string, idx: number, countcc?: boolean, utf16?: boolean): number
---@field chdir fun(dir: string): number
---@field cindent fun(lnum: number): number
---@field clearmatches fun(win?: number): any
---@field col fun(expr: string, winid?: number): number
---@field complete fun(startcol: number, matches: any[]): any
---@field complete_add fun(expr: any): number
---@field complete_check fun(): number
---@field complete_info fun(what?: string[]): table
---@field confirm fun(msg: string, choices?: string, default?: number, type?: string): number
---@field copy fun(expr: any): any
---@field cos fun(expr: number): number
---@field cosh fun(expr: number): number
---@field count fun(comp: any, expr: any, ic?: boolean, start?: number): number
---@field ctxget fun(index?: number): table
---@field ctxpop fun(): any
---@field ctxpush fun(types?: string[]): any
---@field ctxset fun(context: table, index?: number): any
---@field ctxsize fun(): number
---@field cursor fun(lnum: number, col: number, off?: number): number
---@field debugbreak fun(pid: number): number
---@field deepcopy fun(expr: any, noref?: boolean): any
---@field delete fun(fname: string, flags?: string): number
---@field deletebufline fun(buf: any, first: number, last?: number): number
---@field dictwatcheradd fun(dict: table, pattern: string, callback: function): any
---@field dictwatcherdel fun(dict: table, pattern: string, callback: function): any
---@field did_filetype fun(): number
---@field diff_filler fun(lnum: number): number
---@field diff_hlID fun(lnum: number, col: number): number
---@field digraph_get fun(chars: string): string
---@field digraph_getlist fun(listall?: boolean): table[]
---@field digraph_set fun(chars: string, digraph: string): any
---@field digraph_setlist fun(digraphlist: table[]): any
---@field empty fun(expr: any): number
---@field environ fun(): table
---@field escape fun(string: string, chars: string): string
---@field eval fun(string: string): any
---@field eventhandler fun(): number
---@field executable fun(expr: string): number
---@field execute fun(command: string, silent?: string): string
---@field exepath fun(expr: string): string
---@field exists fun(expr: string): number
---@field exp fun(expr: number): number
---@field expand fun(string: string, nosuf?: boolean, list?: boolean): string|string[]
---@field expandcmd fun(string: string, options?: table): string
---@field extend fun(expr1: table, expr2: table, expr3?: string): table
---@field extendnew fun(expr1: table, expr2: table, expr3?: string): table
---@field feedkeys fun(string: string, mode?: string): any
---@field filecopy fun(from: string, to: string): number
---@field filereadable fun(file: string): number
---@field filewritable fun(file: string): number
---@field filter fun(expr1: any, expr2: string|function): any
---@field finddir fun(name: string, path?: string, count?: number): string|string[]
---@field findfile fun(name: string, path?: string, count?: number): string|string[]
---@field flatten fun(list: any[], maxdepth?: number): any[]
---@field flattennew fun(list: any[], maxdepth?: number): any[]
---@field float2nr fun(expr: number): number
---@field floor fun(expr: number): number
---@field fmod fun(expr1: number, expr2: number): number
---@field fnameescape fun(string: string): string
---@field fnamemodify fun(fname: string, mods: string): string
---@field foldclosed fun(lnum: number): number
---@field foldclosedend fun(lnum: number): number
---@field foldlevel fun(lnum: number): number
---@field foldtext fun(): string
---@field foldtextresult fun(lnum: number): string
---@field foreach fun(expr1: any, expr2: string|function): any
---@field fullcommand fun(name: string): string
---@field funcref fun(name: string, arglist?: any[], dict?: table): function
---@field function fun(name: string, arglist?: any[], dict?: table): function
---@field garbagecollect fun(atexit?: boolean): any
---@field get fun(list: any[], idx: number, default?: any): any
---@field getbufinfo fun(buf?: any): table[]
---@field getbufline fun(buf: any, lnum: number, end?: number): string[]
---@field getbufoneline fun(buf: any, lnum: number): string
---@field getbufvar fun(buf: any, varname: string, def?: any): any
---@field getcellwidths fun(): number[][]
---@field getchangelist fun(buf?: any): table
---@field getchar fun(expr?: any, opts?: table): number|string
---@field getcharmod fun(): number
---@field getcharpos fun(expr: string): number[]
---@field getcharsearch fun(): table
---@field getcharstr fun(expr?: any): string
---@field getcmdcomplpat fun(): string
---@field getcmdcompltype fun(): string
---@field getcmdline fun(): string
---@field getcmdpos fun(): number
---@field getcmdprompt fun(): string
---@field getcmdscreenpos fun(): number
---@field getcmdtype fun(): string
---@field getcmdwintype fun(): string
---@field getcompletion fun(pat: string, type: string, filtered?: boolean): string[]
---@field getcurpos fun(winid?: number): number[]
---@field getcursorcharpos fun(winid?: number): number[]
---@field getcwd fun(winnr?: number, tabnr?: number): string
---@field getenv fun(name: string): string
---@field getfontname fun(name?: string): string
---@field getfperm fun(fname: string): string
---@field getfsize fun(fname: string): number
---@field getftime fun(fname: string): number
---@field getftype fun(fname: string): string
---@field getjumplist fun(winnr?: number, tabnr?: number): table
---@field getline fun(lnum: number, end?: number): string|string[]
---@field getloclist fun(nr: number, what?: table): table
---@field getmarklist fun(buf?: any): table[]
---@field getmatches fun(win?: number): table[]
---@field getmousepos fun(): table
---@field getpid fun(): number
---@field getpos fun(expr: string): number[]
---@field getqflist fun(what?: table): table
---@field getreg fun(regname?: string, one?: number, list?: boolean): string|string[]
---@field getreginfo fun(regname?: string): table
---@field getregion fun(pos1: any[], pos2: any[], opts?: table): string[]
---@field getregionpos fun(pos1: any[], pos2: any[], opts?: table): table[]
---@field getregtype fun(regname?: string): string
---@field getscriptinfo fun(opts?: table): table[]
---@field getstacktrace fun(): table[]
---@field gettabinfo fun(tabnr?: number): table[]
---@field gettabvar fun(tabnr: number, varname: string, def?: any): any
---@field gettabwinvar fun(tabnr: number, winnr: number, varname: string, def?: any): any
---@field gettagstack fun(winnr?: number): table
---@field gettext fun(text: string): string
---@field getwininfo fun(winid?: number): table[]
---@field getwinpos fun(timeout?: number): number[]
---@field getwinposx fun(): number
---@field getwinposy fun(): number
---@field getwinvar fun(winnr: number, varname: string, def?: any): any
---@field glob fun(expr: string, nosuf?: boolean, list?: boolean, alllinks?: boolean): string|string[]
---@field glob2regpat fun(string: string): string
---@field globpath fun(path: string, expr: string, nosuf?: boolean, list?: boolean, alllinks?: boolean): string|string[]
---@field has fun(feature: string): number
---@field has_key fun(dict: table, key: string): number
---@field haslocaldir fun(winnr?: number, tabnr?: number): number
---@field hasmapto fun(what: string, mode?: string, abbr?: boolean): number
---@field histadd fun(history: string, item: string): number
---@field histdel fun(history: string, item?: string|number): number
---@field histget fun(history: string, index?: number): string
---@field histnr fun(history: string): number
---@field hlID fun(name: string): number
---@field hlexists fun(name: string): number
---@field hostname fun(): string
---@field iconv fun(string: string, from: string, to: string): string
---@field id fun(expr: any): number
---@field indent fun(lnum: number): number
---@field index fun(object: any[], expr: any, start?: number, ic?: boolean): number
---@field indexof fun(object: any[], expr: string|function, opts?: table): number
---@field input fun(prompt: string, text?: string, completion?: string): string
---@field inputlist fun(textlist: string[]): number
---@field inputrestore fun(): number
---@field inputsave fun(): number
---@field inputsecret fun(prompt: string, text?: string): string
---@field insert fun(object: any[], item: any, idx?: number): any[]
---@field interrupt fun(): any
---@field invert fun(expr: number): number
---@field isabsolutepath fun(path: string): number
---@field isdirectory fun(directory: string): number
---@field isinf fun(expr: any): number
---@field islocked fun(expr: string): number
---@field isnan fun(expr: any): number
---@field items fun(dict: table): any[][]
---@field jobpid fun(job: any): number
---@field jobresize fun(job: any, width: number, height: number): number
---@field jobstart fun(cmd: string|string[], opts?: table): number
---@field jobstop fun(job: any): number
---@field jobwait fun(jobs: any[], timeout?: number): number[]
---@field join fun(list: any[], sep?: string): string
---@field json_decode fun(string: string): any
---@field json_encode fun(expr: any): string
---@field keys fun(dict: table): string[]
---@field keytrans fun(string: string): string
---@field len fun(expr: any): number
---@field libcall fun(lib: string, func: string, arg: string): string
---@field libcallnr fun(lib: string, func: string, arg: any): number
---@field line fun(expr: string, winid?: number): number
---@field line2byte fun(lnum: number): number
---@field lispindent fun(lnum: number): number
---@field list2blob fun(list: number[]): any
---@field list2str fun(list: number[], utf8?: boolean): string
---@field localtime fun(): number
---@field log fun(expr: number): number
---@field log10 fun(expr: number): number
---@field luaeval fun(expr: string, expr2?: any): any
---@field map fun(expr1: any, expr2: string|function): any
---@field maparg fun(name: string, mode?: string, abbr?: boolean, dict?: boolean): string|table
---@field mapcheck fun(name: string, mode?: string, abbr?: boolean): string
---@field maplist fun(abbr?: boolean): table[]
---@field mapnew fun(expr1: any, expr2: string|function): any
---@field mapset fun(mode: string, abbr: boolean, dict: table): any
---@field match fun(expr: string, pat: string, start?: number, count?: number): number
---@field matchadd fun(group: string, pattern: string, priority?: number, id?: number, dict?: table): number
---@field matchaddpos fun(group: string, pos: any[], priority?: number, id?: number, dict?: table): number
---@field matcharg fun(nr: number): string[]
---@field matchbufline fun(buf: any, pat: string, lnum: number, end: number): table[]
---@field matchdelete fun(id: number, win?: number): number
---@field matchend fun(expr: string, pat: string, start?: number, count?: number): number
---@field matchfuzzy fun(list: string[], str: string, dict?: table): string[]
---@field matchfuzzypos fun(list: string[], str: string, dict?: table): any[]
---@field matchlist fun(expr: string, pat: string, start?: number, count?: number): string[]
---@field matchstr fun(expr: string, pat: string, start?: number, count?: number): string
---@field matchstrlist fun(list: string[], pat: string): table[]
---@field matchstrpos fun(expr: string, pat: string, start?: number, count?: number): any[]
---@field max fun(list: any[]): any
---@field menu_get fun(name: string, modes?: string): table[]
---@field menu_info fun(name: string, mode?: string): table
---@field min fun(list: any[]): any
---@field mkdir fun(name: string, path?: string, prot?: number): number
---@field mode fun(expr?: boolean): string
---@field msgpackdump fun(list: any[]): string[]
---@field msgpackparse fun(list: string[]): any[]
---@field nextnonblank fun(lnum: number): number
---@field nr2char fun(expr: number, utf8?: boolean): string
---@field or fun(expr: any, expr2: any): number
---@field pathshorten fun(expr: string, len?: number): string
---@field perleval fun(expr: string): any
---@field pow fun(x: number, y: number): number
---@field prevnonblank fun(lnum: number): number
---@field printf fun(fmt: string, ...): string
---@field prompt_getprompt fun(buf: any): string
---@field prompt_setcallback fun(buf: any, expr: string|function): any
---@field prompt_setinterrupt fun(buf: any, expr: string|function): any
---@field prompt_setprompt fun(buf: any, text: string): any
---@field pum_getpos fun(): table
---@field pumvisible fun(): number
---@field py3eval fun(expr: string): any
---@field pyeval fun(expr: string): any
---@field pyxeval fun(expr: string): any
---@field rand fun(expr?: any[]): number
---@field range fun(expr: number, max?: number, stride?: number): number[]
---@field readblob fun(fname: string): any
---@field readdir fun(dir: string, expr?: string|function): string[]
---@field readfile fun(fname: string, type?: string, max?: number): string[]
---@field reduce fun(object: any[], func: string|function, initial?: any): any
---@field reg_executing fun(): string
---@field reg_recorded fun(): string
---@field reg_recording fun(): string
---@field reltime fun(start?: any[], end?: any[]): any[]
---@field reltimefloat fun(time: any[]): number
---@field reltimestr fun(time: any[]): string
---@field remove fun(list: any[], idx: number, end?: number): any
---@field rename fun(from: string, to: string): number
---@field repeat fun(expr: any, count: number): any
---@field resolve fun(filename: string): string
---@field reverse fun(list: any[]): any[]
---@field round fun(expr: number): number
---@field rpcnotify fun(channel: number, event: string, ...): number
---@field rpcrequest fun(channel: number, method: string, ...): any
---@field rubyeval fun(expr: string): any
---@field screenattr fun(row: number, col: number): number
---@field screenchar fun(row: number, col: number): number
---@field screenchars fun(row: number, col: number): number[]
---@field screencol fun(): number
---@field screenpos fun(winid: number, lnum: number, col: number): table
---@field screenrow fun(): number
---@field screenstring fun(row: number, col: number): string
---@field search fun(pattern: string, flags?: string, stopline?: number, timeout?: number): number
---@field searchcount fun(opts?: table): table
---@field searchdecl fun(name: string, global?: boolean, thisblock?: boolean): number
---@field searchpair fun(start: string, middle: string, end: string, flags?: string, skip?: string, stopline?: number, timeout?: number): number
---@field searchpairpos fun(start: string, middle: string, end: string, flags?: string, skip?: string, stopline?: number, timeout?: number): number[]
---@field searchpos fun(pattern: string, flags?: string, stopline?: number, timeout?: number): number[]
---@field serverlist fun(): string
---@field serverstart fun(address?: string): string
---@field serverstop fun(address: string): number
---@field setbufline fun(buf: any, lnum: number, text: string|string[]): number
---@field setbufvar fun(buf: any, varname: string, val: any): any
---@field setcellwidths fun(list: any[][]): any
---@field setcharpos fun(expr: string, list: number[]): number
---@field setcharsearch fun(dict: table): table
---@field setcmdline fun(str: string, pos?: number): number
---@field setcmdpos fun(pos: number): number
---@field setcursorcharpos fun(lnum: number, col: number, off?: number): number
---@field setenv fun(name: string, val: string): any
---@field setfperm fun(fname: string, mode: string): number
---@field setline fun(lnum: number, text: string|string[]): number
---@field setloclist fun(nr: number, list: table[], action?: string, what?: table): number
---@field setmatches fun(list: table[], win?: number): number
---@field setpos fun(expr: string, list: number[]): number
---@field setqflist fun(list: table[], action?: string, what?: table): number
---@field setreg fun(regname: string, value: any, options?: string): number
---@field settabvar fun(tabnr: number, varname: string, val: any): any
---@field settabwinvar fun(tabnr: number, winnr: number, varname: string, val: any): any
---@field settagstack fun(winnr: number, dict: table, action?: string): number
---@field setwinvar fun(winnr: number, varname: string, val: any): any
---@field sha256 fun(string: string): string
---@field shellescape fun(string: string, special?: boolean): string
---@field shiftwidth fun(col?: number): number
---@field sign_define fun(name: string, dict?: table): any
---@field sign_getdefined fun(name?: string): table[]
---@field sign_getplaced fun(buf?: any, dict?: table): table[]
---@field sign_jump fun(id: number, group: string, buf: any): number
---@field sign_place fun(id: number, group: string, name: string, buf: any, dict?: table): number
---@field sign_placelist fun(list: table[]): number[]
---@field sign_undefine fun(name?: string): number
---@field sign_unplace fun(group: string, dict?: table): number
---@field sign_unplacelist fun(list: table[]): number[]
---@field simplify fun(filename: string): string
---@field sin fun(expr: number): number
---@field sinh fun(expr: number): number
---@field slice fun(expr: any, start: number, end?: number): any
---@field sockconnect fun(mode: string, address: string, opts?: table): number
---@field sort fun(list: any[], func?: string|function, dict?: table): any[]
---@field soundfold fun(word: string): string
---@field spellbadword fun(sentence?: string): string[]
---@field spellsuggest fun(word: string, max?: number, capital?: boolean): string[]
---@field split fun(string: string, pattern?: string, keepempty?: boolean): string[]
---@field sqrt fun(expr: number): number
---@field srand fun(expr?: any[]): any[]
---@field state fun(what?: string): string
---@field stdioopen fun(dict: table): number
---@field stdpath fun(what: string): string|string[]
---@field str2float fun(string: string, quoted?: boolean): number
---@field str2list fun(string: string, utf8?: boolean): number[]
---@field str2nr fun(string: string, base?: number, quoted?: boolean): number
---@field strcharlen fun(string: string): number
---@field strcharpart fun(src: string, start: number, len?: number): string
---@field strchars fun(string: string, skipcc?: boolean): number
---@field strdisplaywidth fun(string: string, col?: number): number
---@field strftime fun(format: string, time?: number): string
---@field strgetchar fun(str: string, index: number): number
---@field stridx fun(haystack: string, needle: string, start?: number): number
---@field string fun(expr: any): string
---@field strlen fun(string: string): number
---@field strpart fun(src: string, start: number, len?: number, chars?: boolean): string
---@field strptime fun(format: string, timestring: string): number
---@field strridx fun(haystack: string, needle: string, start?: number): number
---@field strtrans fun(string: string): string
---@field strutf16len fun(string: string, countcc?: boolean): number
---@field strwidth fun(string: string): number
---@field submatch fun(nr: number, list?: boolean): string|string[]
---@field substitute fun(expr: string, pat: string, sub: string, flags: string): string
---@field swapfilelist fun(): string[]
---@field swapinfo fun(fname: string): table
---@field swapname fun(buf: any): string
---@field synID fun(lnum: number, col: number, trans: number): number
---@field synIDattr fun(synID: number, what: string, mode?: string): string
---@field synIDtrans fun(synID: number): number
---@field synconcealed fun(lnum: number, col: number): any[]
---@field synstack fun(lnum: number, col: number): number[]
---@field system fun(expr: string, input?: string): string
---@field systemlist fun(expr: string, input?: string, keepempty?: boolean): string[]
---@field tabpagebuflist fun(arg?: number): number[]
---@field tabpagenr fun(arg?: string): number
---@field tabpagewinnr fun(tabarg: number, arg?: string): number
---@field tagfiles fun(): string[]
---@field taglist fun(expr: string, filename?: string): table[]
---@field tan fun(expr: number): number
---@field tanh fun(expr: number): number
---@field tempname fun(): string
---@field test_garbagecollect_now fun(): any
---@field timer_info fun(id?: number): table[]
---@field timer_pause fun(id: number, pause: boolean): any
---@field timer_start fun(time: number, callback: string|function, opts?: table): number
---@field timer_stop fun(id: number): any
---@field timer_stopall fun(): any
---@field tolower fun(expr: string): string
---@field toupper fun(expr: string): string
---@field tr fun(src: string, fromstr: string, tostr: string): string
---@field trim fun(text: string, mask?: string, dir?: number): string
---@field trunc fun(expr: number): number
---@field type fun(expr: any): number
---@field undofile fun(name: string): string
---@field undotree fun(): table
---@field uniq fun(list: any[], func?: string|function, dict?: table): any[]
---@field utf16idx fun(string: string, idx: number): number
---@field values fun(dict: table): any[]
---@field virtcol fun(expr: string, list?: boolean): number|number[]
---@field virtcol2col fun(winid: number, lnum: number, col: number): number
---@field visualmode fun(expr?: boolean): string
---@field wait fun(delay: number, condition?: string|function, interval?: number): number
---@field wildmenumode fun(): number
---@field win_execute fun(id: number, command: string, silent?: boolean): string
---@field win_findbuf fun(bufnr: number): number[]
---@field win_getid fun(winnr?: number, tabnr?: number): number
---@field win_gettype fun(winnr?: number): string
---@field win_gotoid fun(expr: number): number
---@field win_id2tabwin fun(expr: number): number[]
---@field win_id2win fun(expr: number): number
---@field win_move_separator fun(winnr: number, offset: number): number
---@field win_move_statusline fun(winnr: number, offset: number): number
---@field win_screenpos fun(winnr: number): number[]
---@field win_splitmove fun(winnr: number, target: number, options?: table): number
---@field winbufnr fun(winnr: number): number
---@field wincol fun(): number
---@field windowsversion fun(): string
---@field winheight fun(winnr: number): number
---@field winlayout fun(tabnr?: number): any[]
---@field winline fun(): number
---@field winnr fun(arg?: string): number
---@field winrestcmd fun(): string
---@field winrestview fun(dict: table): any
---@field winsaveview fun(): table
---@field winwidth fun(winnr: number): number
---@field wordcount fun(): table
---@field writefile fun(object: string[], fname: string, flags?: string): number
---@field xor fun(expr: any, expr2: any): number
---Vim Option Type
---@class vim.Option
---Option setting (set format)
---@class vim.opt
---@field smarttab boolean|vim.Option
---@field expandtab boolean|vim.Option
---@field shiftwidth number|vim.Option
---@field tabstop number|vim.Option
---@field number boolean|vim.Option
---@field relativenumber boolean|vim.Option
---@field wrap boolean|vim.Option
---@field linebreak boolean|vim.Option
---@field showbreak string|vim.Option
---@field wildignore string[]|vim.Option
---@field listchars table|vim.Option
---@field formatoptions table|vim.Option
---@field shortmess string|vim.Option
---@field whichwrap string|vim.Option
---Log level constants
---@class vim.log
---@field levels vim.log.levels
---@class vim.log.levels
---@field TRACE number
---@field DEBUG number
---@field INFO number
---@field WARN number
---@field ERROR number
---@field OFF number
---Keymap management
---@class vim.keymap
---@field set fun(mode: string|string[], lhs: string, rhs: string|function, opts?: table)
---@field del fun(modes: string|string[], lhs: string, opts?: table)
---File System Operations
---@class vim.fs
---@field abspath fun(path: string): string
---@field basename fun(file: string): string
---@field dirname fun(file: string): string
---@field joinpath fun(...: string): string
---@field normalize fun(path: string, opts?: table): string
---@field find fun(names: string[], opts?: table): string[]
---@field dir fun(path: string, opts?: table): function
---@field parents fun(start: string): function
---@field root fun(source: string, marker: string|string[]): string|nil
---@field rm fun(path: string, opts?: table)
---UI Operation
---@class vim.ui
---@field input fun(opts: table, on_confirm: function)
---@field select fun(items: any[], opts: table, on_choice: function)
---@field open fun(path: string, opts?: table): boolean, string|nil
---Highlight Operation
---@class vim.hl
---@field on_yank fun(opts?: table)
---@field range fun(bufnr: number, ns: number, higroup: string, start: number[], finish: number[], opts?: table)
---@field priorities table
---File Type Management
---@class vim.filetype
---@field add fun(filetypes: table)
---@field match fun(args: table): string|nil
---@field get_option fun(filetype: string, option: string): any
---Spell Check
---@class vim.spell
---@field check fun(str: string): table[]
---Base64 encoding
---@class vim.base64
---@field encode fun(str: string): string
---@field decode fun(str: string): string
---JSON processing
---@class vim.json
---@field encode fun(obj: any, opts?: table): string
---@field decode fun(str: string, opts?: table): any
---MessagePack Serialization
---@class vim.mpack
---@field encode fun(obj: any): string
---@field decode fun(str: string): any
---LSP (Language Server Protocol)
---@class vim.lsp
---@field config fun(name: string, opts: table): table
---@field enable fun(name: string, bufnr?: number)
---@field start fun(config: table): number
---@field stop_client fun(client_id: number, force?: boolean)
---@field get_client_by_id fun(client_id: number): table|nil
---@field get_clients fun(opts?: table): table[]
---@field omnifunc fun(find_start: number): any
---@field formatexpr fun(): any
---@field tagfunc fun(pattern: string, flags: string, info: table): table[]
---@field handlers table
---@field buf vim.lsp.buf
---@field completion table
---LSP buffer operation
---@class vim.lsp.buf
---@field hover fun()
---@field definition fun()
---@field declaration fun()
---@field implementation fun()
---@field references fun()
---@field rename fun()
---@field code_action fun(opts?: table)
---@field format fun(opts?: table)
---@field signature_help fun()
---@field document_symbol fun()
---@field workspace_symbol fun(query?: string)
---@field type_definition fun()
---Diagnostics
---@class vim.diagnostic
---@field config fun(opts?: table, namespace?: number)
---@field enable fun(bufnr?: number, namespace?: number)
---@field disable fun(bufnr?: number, namespace?: number)
---@field get fun(bufnr?: number, opts?: table): table[]
---@field set fun(namespace: number, bufnr: number, diagnostics: table[], opts?: table)
---@field reset fun(namespace?: number, bufnr?: number)
---@field show fun(namespace?: number, bufnr?: number, diagnostics?: table[], opts?: table)
---@field hide fun(namespace?: number, bufnr?: number)
---@field goto_next fun(opts?: table)
---@field goto_prev fun(opts?: table)
---@field open_float fun(opts?: table, ...: any): table, number
---@field setloclist fun(opts?: table)
---@field setqflist fun(opts?: table)
---@field severity vim.diagnostic.severity
---@field handlers table
---Diagnostic level
---@class vim.diagnostic.severity
---@field ERROR number
---@field WARN number
---@field INFO number
---@field HINT number
---Tree-sitter
---@class vim.treesitter
---@field language_version number
---@field minimum_language_version number
---@field start fun(bufnr?: number, lang?: string): boolean
---@field stop fun(bufnr?: number)
---@field get_parser fun(bufnr?: number, lang?: string, opts?: table): table
---@field get_node fun(opts?: table): table|nil
---@field get_node_text fun(node: table, source?: number|string): string
---@field get_node_range fun(node_or_range: table): number, number, number, number
---@field get_captures_at_cursor fun(winnr?: number): table[]
---@field get_captures_at_pos fun(bufnr: number, row: number, col: number): table[]
---@field foldexpr fun(lnum: number): string
---@field language vim.treesitter.language
---@field query vim.treesitter.query
---Tree-sitter language management
---@class vim.treesitter.language
---@field add fun(lang: string, opts?: table)
---@field register fun(lang: string, opts: table)
---@field get_lang fun(filetype: string): string
---Tree-sitter query
---@class vim.treesitter.query
---@field get fun(lang: string, query_name: string): table|nil
---@field parse fun(lang: string, query: string): table
---@field list_predicates fun(): string[]
---@field list_directives fun(): string[]
---@field add_predicate fun(name: string, handler: function, opts?: table)
---@field add_directive fun(name: string, handler: function, opts?: table)
---glob pattern matching
---@class vim.glob
---@field to_lpeg fun(pattern: string): table
---LPeg pattern matching
---@class vim.lpeg
---@field match fun(pattern: table, subject: string, init?: number, ...: any): any
---@field P fun(value: any): table
---@field R fun(...: string): table
---@field S fun(string: string): table
---@field C fun(patt: table): table
---@field Cc fun(...: any): table
---@field Ct fun(patt: table): table
---@field locale fun(tab?: table): table
---@field setmaxstack fun(max: number)
---@field B fun(pattern: table): table
---@field Cb fun(name: string): table
---@field Carg fun(n: number): table
---@field Cf fun(patt: table, func: function): table
---@field Cg fun(patt: table, name?: string): table
---@field Cmt fun(patt: table, fn: function): table
---@field Cp fun(): table
---@field Cs fun(patt: table): table
---Module Loader
---@class vim.loader
---@field enable fun(enable?: boolean)
---@field find fun(modname: string, opts?: table): table[]
---@field reset fun(path?: string)
---Health Check
---@class vim.health
---@field start fun(name: string)
---@field ok fun(msg: string)
---@field error fun(msg: string, ...: any)
---@field warn fun(msg: string, ...: any)
---@field info fun(msg: string)
-- Explicit global vim variable types
---@type vim
vim = vim
--[[
The MIT License (MIT)
Copyright (c) 2025 aiya000
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
--]]
@aiya000
Copy link
Author

aiya000 commented Jul 22, 2025

Neovim全くわからないので、Claude Codeにアレコレ言われつつ、アレコレ言いながら、作ってもらいました。
プロジェクトルートに.luarcとtypes/vim.luaを置いてね!(init.luaなら~/.config/nvim/{.luarc,types/vim.lua}

@aiya000
Copy link
Author

aiya000 commented Jul 22, 2025

vim.luaを置く位置に注意。

@aiya000
Copy link
Author

aiya000 commented Jul 22, 2025

もし他の方法があったら教えてね!
(この方法だと、Neovimに関数が追加されても、自動追従はできないので…。)

@aiya000
Copy link
Author

aiya000 commented Jul 31, 2025

Vimでinit.luaを書くのに利用中。
Neovimからは、もっと普通に利用できるluaのlsp用プラグインがあるらしい?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment