Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- File: /home/sergio/.config/nvim/ftplugin/lua.lua
- -- Last Change: Sat, 19 Feb 2022 15:58
- -- source: https://www.reddit.com/r/neovim/comments/pl0p5v/shortcut_to_open_lua_require_file/
- -- vim.opt_local.suffixesadd:prepend('.lua')
- -- vim.opt_local.suffixesadd:prepend('init.lua')
- -- vim.opt_local.path:prepend(vim.fn.stdpath('config')..'/lua')
- local fmt = string.format
- -- Iterator that splits a string o a given delimiter
- local function split(str, delim)
- delim = delim or "%s"
- return string.gmatch(str, fmt('[^%s]+', delim))
- end
- -- Find the proper directory separator depending
- -- on lua installation or OS.
- local function dir_separator()
- -- Look at package.config for directory separator string (it's the first line)
- if package.config then
- return string.match(package.config, '^[^\n]')
- elseif vim.fn.has('win32') == 1 then
- return '\\'
- else
- return '/'
- end
- end
- -- Search for lua traditional include paths.
- -- This mimics how require internally works.
- local function include_paths(fname, ext)
- ext = ext or "lua"
- local sep = dir_separator()
- local paths = string.gsub(package.path, '%?', fname)
- for path in split(paths, "%;") do
- if vim.fn.filereadable(path) == 1 then
- return path
- end
- end
- end
- -- Search for nvim lua include paths
- local function include_rtpaths(fname, ext)
- ext = ext or "lua"
- local sep = dir_separator()
- local rtpaths = vim.api.nvim_list_runtime_paths()
- local modfile, initfile = fmt('%s.%s', fname, ext), fmt('init.%s', ext)
- for _, path in ipairs(rtpaths) do
- -- Look on runtime path for 'lua/*.lua' files
- local path1 = table.concat({path, ext, modfile}, sep)
- if vim.fn.filereadable(path1) == 1 then
- return path1
- end
- -- Look on runtime path for 'lua/*/init.lua' files
- local path2 = table.concat({path, ext, fname, initfile}, sep)
- if vim.fn.filereadable(path2) == 1 then
- return path2
- end
- end
- end
- -- Global function that searches the path for the required file
- function find_required_path(module)
- -- Look at package.config for directory separator string (it's the first line)
- local sep = string.match(package.config, '^[^\n]')
- -- Properly change '.' to separator (probably '/' on *nix and '\' on Windows)
- local fname = vim.fn.substitute(module, "\\.", sep, "g")
- local f
- ---- First search for lua modules
- f = include_paths(fname, 'lua')
- if f then return f end
- -- This part is just for nvim modules
- f = include_rtpaths(fname, 'lua')
- if f then return f end
- ---- Now search for Fennel modules
- f = include_paths(fname, 'fnl')
- if f then return f end
- -- This part is just for nvim modules
- f = include_rtpaths(fname, 'fnl')
- if f then return f end
- end
- -- Set options to open require with gf
- vim.opt_local.include = [=[\v<((do|load)file|require)\s*\(?['"]\zs[^'"]+\ze['"]]=]
- vim.opt_local.includeexpr = "v:lua.find_required_path(v:fname)"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement