diff --git a/Makefile b/Makefile index 0bec4bf..7c69d53 100644 --- a/Makefile +++ b/Makefile @@ -38,13 +38,15 @@ golibs: /usr/bin/go # dotfiles .PHONY: dotfiles -dotfiles: ~/.gitconfig ~/.gitignore ~/.config/zsh ~/.zshrc +dotfiles: ~/.gitconfig ~/.gitignore ~/.config/zsh ~/.config/nvim ~/.zshrc ~/.gitconfig: @ln -s $(pwd)/git/config ~/.gitconfig || true ~/.gitignore: @ln -s $(pwd)/git/ignore ~/.gitignore || true +~/.config/nvim: + @ln -s $(pwd)/nvim ~/.config/nvim || true ~/.config/zsh: @ln -s $(pwd)/zsh ~/.config/zsh || true ~/.zshrc: - @ln -s $(pwd)/zsh/zshrc ~/.zshrc || true \ No newline at end of file + @ln -s $(pwd)/zsh/zshrc ~/.zshrc || true diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..68090de --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,5 @@ +require 'options' +require 'keymaps' +require 'autocommands' +require 'plugins' +require 'lsp' diff --git a/nvim/lua/autocommands.lua b/nvim/lua/autocommands.lua new file mode 100644 index 0000000..a052a8c --- /dev/null +++ b/nvim/lua/autocommands.lua @@ -0,0 +1,46 @@ +vim.api.nvim_create_autocmd({'BufWritePre'}, { + pattern = '*.go', + callback = function() + local params = vim.lsp.util.make_range_params(nil, vim.lsp.util._get_offset_encoding()) + params.context = { only = {'source.organizeImports'} } + local result = vim.lsp.buf_request_sync(0, 'textDocument/codeAction', params, 3000) + for _, res in pairs(result or {}) do + for _, r in pairs(res.result or {}) do + if r.edit then + vim.lsp.util.apply_workspace_edit(r.edit, vim.lsp.util._get_offset_encoding()) + else + vim.lsp.buf.execute_command(r.command) + end + end + end + end, +}) + +vim.api.nvim_create_autocmd({'BufWritePre'}, { + pattern = '*.go', + callback = function() + vim.lsp.buf.format(nil, 3000) + end +}) + + +local TrimWhiteSpaceGrp = vim.api.nvim_create_augroup('TrimWhiteSpaceGrp', {}) +vim.api.nvim_create_autocmd('BufWritePre', { + group = TrimWhiteSpaceGrp, + pattern = '*', + command = '%s/\\s\\+$//e', +}) + +local YankHighlightGrp = vim.api.nvim_create_augroup('YankHighlightGrp', {}) +vim.api.nvim_create_autocmd('TextYankPost', { + group = YankHighlightGrp, + pattern = '*', + callback = function() + vim.highlight.on_yank({ + higroup = 'IncSearch', + timeout = 40, + }) + end, +}) + + diff --git a/nvim/lua/keymaps.lua b/nvim/lua/keymaps.lua new file mode 100644 index 0000000..8cbd8da --- /dev/null +++ b/nvim/lua/keymaps.lua @@ -0,0 +1,49 @@ +local map = vim.api.nvim_set_keymap +local opts = {noremap = true, silent = true} + +-- Tree +map('n', '', ':NvimTreeToggle', opts) + +-- Telescope +map('n', 'ff', 'Telescope find_files', opts) +map('n', 'fg', 'Telescope live_grep', opts) +map('n', 'fb', 'Telescope buffers', opts) + +-- LSP +--map('n', 'e', vim.diagnostic.open_float, opts) +--map('n', '[d', vim.diagnostic.goto_prev, opts) +--map('n', ']d', vim.diagnostic.goto_next, opts) +--map('n', 'q', vim.diagnostic.setloclist, opts) + +local on_attach = function(client, bufnr) + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + + local bufopts = { noremap=true, silent=true, buffer=bufnr } + + -- стандартные горячие клавиши для LSP, больше в документации + -- https://github.com/neovim/nvim-lspconfig + map('n', 'gD', vim.lsp.buf.declaration, bufopts) + map('n', 'gd', vim.lsp.buf.definition, bufopts) + map('n', 'K', vim.lsp.buf.hover, bufopts) + map('n', 'gi', vim.lsp.buf.implementation, bufopts) + map('n', '', vim.lsp.buf.signature_help, bufopts) + map('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) + map('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) + map('n', 'wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, bufopts) + map('n', 'D', vim.lsp.buf.type_definition, bufopts) + map('n', 'rn', vim.lsp.buf.rename, bufopts) + map('n', 'ca', vim.lsp.buf.code_action, bufopts) + map('n', 'gr', vim.lsp.buf.references, bufopts) + map('n', 'f', vim.lsp.buf.formatting, bufopts) +end + +local function change_root_to_global_cwd() + local api = require("nvim-tree.api") + local global_cwd = vim.fn.getcwd(-1, -1) + api.tree.change_root(global_cwd) +end + +vim.keymap.set('n', '', change_root_to_global_cwd, {}) + diff --git a/nvim/lua/lsp.lua b/nvim/lua/lsp.lua new file mode 100644 index 0000000..468ea71 --- /dev/null +++ b/nvim/lua/lsp.lua @@ -0,0 +1,65 @@ + +local cmp = require('cmp') + +local source_mapping = { + buffer = '[Buffer]', + nvim_lsp = '[LSP]', + nvim_lua = '[Lua]', + cmp_tabnine = '[TN]', + path = '[Path]', +} + +cmp.setup({ + mapping = cmp.mapping.preset.insert({ + [''] = cmp.mapping.confirm({ select = true }), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete(), + }), + snippet = { + expand = function(args) + require('luasnip').lsp_expand(args.body) + end, + }, + formatting = { + format = function(entry, vim_item) + local menu = source_mapping[entry.source.name] + vim_item.menu = menu + return vim_item + end + }, + sources = cmp.config.sources({ + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + }, { + { name = 'buffer' }, + }) +}) + +-- инициализация LSP для различных ЯП +local lspconfig = require('lspconfig') +local util = require('lspconfig/util') + +local function config(_config) + return vim.tbl_deep_extend('force', { + capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()), + }, _config or {}) +end + +-- иницализация gopls LSP для Go +-- https://github.com/golang/tools/blob/master/gopls/doc/vim.md#neovim-install +lspconfig.gopls.setup(config({ + on_attach = on_attach, + cmd = { 'gopls', 'serve' }, + filetypes = { 'go', 'go.mod' }, + root_dir = util.root_pattern('go.work', 'go.mod', '.git'), + settings = { + gopls = { + analyses = { + unusedparams = true, + shadow = true, + }, + staticcheck = true, + } + } +})) diff --git a/nvim/lua/options.lua b/nvim/lua/options.lua new file mode 100644 index 0000000..327c817 --- /dev/null +++ b/nvim/lua/options.lua @@ -0,0 +1,46 @@ +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 + +local options = { + backup = false, -- creates a backup file + clipboard = "unnamedplus", -- allows neovim to access the system clipboard + cmdheight = 2, -- more space in the neovim command line for displaying messages + completeopt = { "menuone", "noselect" }, -- mostly just for cmp + conceallevel = 0, -- so that `` is visible in markdown files + fileencoding = "utf-8", -- the encoding written to a file + hidden = true, -- required to keep multiple buffers and open multiple buffers + hlsearch = true, -- highlight all matches on previous search pattern + ignorecase = true, -- ignore case in search patterns + mouse = "a", -- allow the mouse to be used in neovim + pumheight = 10, -- pop up menu height + showmode = false, -- we don't need to see things like -- INSERT -- anymore + showtabline = 2, -- always show tabs + smartcase = true, -- smart case + smartindent = true, -- make indenting smarter again + splitbelow = true, -- force all horizontal splits to go below current window + splitright = true, -- force all vertical splits to go to the right of current window + swapfile = false, -- creates a swapfile + termguicolors = true, -- set term gui colors (most terminals support this) + timeoutlen = 100, -- time to wait for a mapped sequence to complete (in milliseconds) + undofile = true, -- enable persistent undo + updatetime = 300, -- faster completion (4000ms default) + writebackup = false, -- if a file is being edited by another program (or was written to file while editing with another program), it is not allowed to be edited + shiftwidth = 2, -- the number of spaces inserted for each indentation + tabstop = 2, -- insert 2 spaces for a tab + cursorline = true, -- highlight the current line + number = true, -- set numbered lines + relativenumber = false, -- set relative numbered lines + numberwidth = 4, -- set number column width to 2 {default 4} + signcolumn = "yes", -- always show the sign column, otherwise it would shift the text each time + wrap = false, -- display lines as one long line + scrolloff = 8, -- is one of my fav + sidescrolloff = 8, +} + +vim.opt.shortmess:append "c" + +for k, v in pairs(options) do + vim.opt[k] = v +end + +vim.cmd "set whichwrap+=<,>,[,],h,l" diff --git a/nvim/lua/plugins/init.lua b/nvim/lua/plugins/init.lua new file mode 100644 index 0000000..6308262 --- /dev/null +++ b/nvim/lua/plugins/init.lua @@ -0,0 +1,75 @@ +local fn = vim.fn +local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim' +if fn.empty(fn.glob(install_path)) > 0 then + packer_bootstrap = fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) +end + +return require('packer').startup(function(use) + use 'wbthomason/packer.nvim' + use 'nvim-lua/plenary.nvim' + use 'neovim/nvim-lspconfig' + use 'hrsh7th/cmp-nvim-lsp' + use 'hrsh7th/cmp-buffer' + use 'hrsh7th/cmp-path' + use 'hrsh7th/nvim-cmp' + use { + 'nvim-lualine/lualine.nvim', + config = function() + require 'plugins.lualine' + end + } + + -- движок сниппетов + use { + 'L3MON4D3/LuaSnip', + after = 'friendly-snippets', + config = function() + require('luasnip/loaders/from_vscode').load({ + paths = { '~/.local/share/nvim/site/pack/packer/start/friendly-snippets' } + }) + end + } + + -- автодополнения для сниппетов + use 'saadparwaiz1/cmp_luasnip' + + -- набор готовых сниппетов для всех языков, включая go + use 'rafamadriz/friendly-snippets' + + -- плагин для простого комментирования кода + use { + 'numToStr/Comment.nvim', + config = function() + require('Comment').setup() + end + } + use { + 'nvim-treesitter/nvim-treesitter', + run = ':TSUpdate', + config = function() + require 'plugins.treesitter' + end + } + use { + 'nvim-telescope/telescope.nvim', + config = function() + require 'plugins.telescope' + end + } + use { + 'olexsmir/gopher.nvim', + config = function() + -- require 'plugins.gopher' + end + } + use { + 'nvim-tree/nvim-tree.lua', + config = function() + require 'plugins.tree' + end + } + use 'nvim-tree/nvim-web-devicons' + if packer_bootstrap then + require('packer').sync() + end +end) diff --git a/nvim/lua/plugins/lualine.lua b/nvim/lua/plugins/lualine.lua new file mode 100644 index 0000000..891b392 --- /dev/null +++ b/nvim/lua/plugins/lualine.lua @@ -0,0 +1,40 @@ +require('lualine').setup { + options = { + icons_enabled = true, + theme = 'auto', + component_separators = { left = '', right = ''}, + section_separators = { left = '', right = ''}, + disabled_filetypes = { + statusline = {}, + winbar = {}, + }, + ignore_focus = {}, + always_divide_middle = true, + globalstatus = false, + refresh = { + statusline = 1000, + tabline = 1000, + winbar = 1000, + } + }, + sections = { + lualine_a = {'mode'}, + lualine_b = {'branch', 'diff', 'diagnostics'}, + lualine_c = {'filename'}, + lualine_x = {'encoding', 'fileformat', 'filetype'}, + lualine_y = {'progress'}, + lualine_z = {'location'} + }, + inactive_sections = { + lualine_a = {}, + lualine_b = {}, + lualine_c = {'filename'}, + lualine_x = {'location'}, + lualine_y = {}, + lualine_z = {} + }, + tabline = {}, + winbar = {}, + inactive_winbar = {}, + extensions = {} +} diff --git a/nvim/lua/plugins/telescope.lua b/nvim/lua/plugins/telescope.lua new file mode 100644 index 0000000..44b1869 --- /dev/null +++ b/nvim/lua/plugins/telescope.lua @@ -0,0 +1,7 @@ +require('telescope').setup{ + pickers = { + buffers = { + initial_mode = 'normal' + } + } +} diff --git a/nvim/lua/plugins/tree.lua b/nvim/lua/plugins/tree.lua new file mode 100644 index 0000000..86cc36c --- /dev/null +++ b/nvim/lua/plugins/tree.lua @@ -0,0 +1,14 @@ +require("nvim-tree").setup({ + sort = { + sorter = "case_sensitive", + }, + view = { + width = 30, + }, + renderer = { + group_empty = true, + }, + filters = { + dotfiles = true, + }, +}) diff --git a/nvim/lua/plugins/treesitter.lua b/nvim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..ff02ec4 --- /dev/null +++ b/nvim/lua/plugins/treesitter.lua @@ -0,0 +1,5 @@ +require('nvim-treesitter.configs').setup{ + ensure_installed = 'all', + ignore_install = { 'phpdoc' }, + highlight = { enable = true } +} diff --git a/nvim/plugin/packer_compiled.lua b/nvim/plugin/packer_compiled.lua new file mode 100644 index 0000000..b84adf7 --- /dev/null +++ b/nvim/plugin/packer_compiled.lua @@ -0,0 +1,221 @@ +-- Automatically generated packer.nvim plugin loader code + +if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then + vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') + return +end + +vim.api.nvim_command('packadd packer.nvim') + +local no_errors, error_msg = pcall(function() + +_G._packer = _G._packer or {} +_G._packer.inside_compile = true + +local time +local profile_info +local should_profile = false +if should_profile then + local hrtime = vim.loop.hrtime + profile_info = {} + time = function(chunk, start) + if start then + profile_info[chunk] = hrtime() + else + profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 + end + end +else + time = function(chunk, start) end +end + +local function save_profiles(threshold) + local sorted_times = {} + for chunk_name, time_taken in pairs(profile_info) do + sorted_times[#sorted_times + 1] = {chunk_name, time_taken} + end + table.sort(sorted_times, function(a, b) return a[2] > b[2] end) + local results = {} + for i, elem in ipairs(sorted_times) do + if not threshold or threshold and elem[2] > threshold then + results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' + end + end + if threshold then + table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)') + end + + _G._packer.profile_output = results +end + +time([[Luarocks path setup]], true) +local package_path_str = "/home/neonxp/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?.lua;/home/neonxp/.cache/nvim/packer_hererocks/2.1.0-beta3/share/lua/5.1/?/init.lua;/home/neonxp/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?.lua;/home/neonxp/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/luarocks/rocks-5.1/?/init.lua" +local install_cpath_pattern = "/home/neonxp/.cache/nvim/packer_hererocks/2.1.0-beta3/lib/lua/5.1/?.so" +if not string.find(package.path, package_path_str, 1, true) then + package.path = package.path .. ';' .. package_path_str +end + +if not string.find(package.cpath, install_cpath_pattern, 1, true) then + package.cpath = package.cpath .. ';' .. install_cpath_pattern +end + +time([[Luarocks path setup]], false) +time([[try_loadstring definition]], true) +local function try_loadstring(s, component, name) + local success, result = pcall(loadstring(s), name, _G.packer_plugins[name]) + if not success then + vim.schedule(function() + vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) + end) + end + return result +end + +time([[try_loadstring definition]], false) +time([[Defining packer_plugins]], true) +_G.packer_plugins = { + ["Comment.nvim"] = { + config = { "\27LJ\2\n5\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\fComment\frequire\0" }, + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/Comment.nvim", + url = "https://github.com/numToStr/Comment.nvim" + }, + LuaSnip = { + config = { "\27LJ\2\n\1\0\0\4\0\6\0\t6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\4\0005\3\3\0=\3\5\2B\0\2\1K\0\1\0\npaths\1\0\0\1\2\0\0A~/.local/share/nvim/site/pack/packer/start/friendly-snippets\tload luasnip/loaders/from_vscode\frequire\0" }, + load_after = {}, + loaded = true, + needs_bufread = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/opt/LuaSnip", + url = "https://github.com/L3MON4D3/LuaSnip" + }, + ["cmp-buffer"] = { + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/cmp-buffer", + url = "https://github.com/hrsh7th/cmp-buffer" + }, + ["cmp-nvim-lsp"] = { + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/cmp-nvim-lsp", + url = "https://github.com/hrsh7th/cmp-nvim-lsp" + }, + ["cmp-path"] = { + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/cmp-path", + url = "https://github.com/hrsh7th/cmp-path" + }, + cmp_luasnip = { + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/cmp_luasnip", + url = "https://github.com/saadparwaiz1/cmp_luasnip" + }, + ["friendly-snippets"] = { + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/friendly-snippets", + url = "https://github.com/rafamadriz/friendly-snippets" + }, + ["gopher.nvim"] = { + config = { "\27LJ\2\n\v\0\0\1\0\0\0\1K\0\1\0\0" }, + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/gopher.nvim", + url = "https://github.com/olexsmir/gopher.nvim" + }, + ["lualine.nvim"] = { + config = { "\27LJ\2\n/\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\20plugins.lualine\frequire\0" }, + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/lualine.nvim", + url = "https://github.com/nvim-lualine/lualine.nvim" + }, + ["nvim-cmp"] = { + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/nvim-cmp", + url = "https://github.com/hrsh7th/nvim-cmp" + }, + ["nvim-lspconfig"] = { + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/nvim-lspconfig", + url = "https://github.com/neovim/nvim-lspconfig" + }, + ["nvim-tree.lua"] = { + config = { "\27LJ\2\n,\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\17plugins.tree\frequire\0" }, + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/nvim-tree.lua", + url = "https://github.com/nvim-tree/nvim-tree.lua" + }, + ["nvim-treesitter"] = { + config = { "\27LJ\2\n2\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\23plugins.treesitter\frequire\0" }, + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/nvim-treesitter", + url = "https://github.com/nvim-treesitter/nvim-treesitter" + }, + ["nvim-web-devicons"] = { + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/nvim-web-devicons", + url = "https://github.com/nvim-tree/nvim-web-devicons" + }, + ["packer.nvim"] = { + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/packer.nvim", + url = "https://github.com/wbthomason/packer.nvim" + }, + ["plenary.nvim"] = { + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/plenary.nvim", + url = "https://github.com/nvim-lua/plenary.nvim" + }, + ["telescope.nvim"] = { + config = { "\27LJ\2\n1\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\22plugins.telescope\frequire\0" }, + loaded = true, + path = "/home/neonxp/.local/share/nvim/site/pack/packer/start/telescope.nvim", + url = "https://github.com/nvim-telescope/telescope.nvim" + } +} + +time([[Defining packer_plugins]], false) +-- Config for: nvim-tree.lua +time([[Config for nvim-tree.lua]], true) +try_loadstring("\27LJ\2\n,\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\17plugins.tree\frequire\0", "config", "nvim-tree.lua") +time([[Config for nvim-tree.lua]], false) +-- Config for: nvim-treesitter +time([[Config for nvim-treesitter]], true) +try_loadstring("\27LJ\2\n2\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\23plugins.treesitter\frequire\0", "config", "nvim-treesitter") +time([[Config for nvim-treesitter]], false) +-- Config for: Comment.nvim +time([[Config for Comment.nvim]], true) +try_loadstring("\27LJ\2\n5\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\fComment\frequire\0", "config", "Comment.nvim") +time([[Config for Comment.nvim]], false) +-- Config for: lualine.nvim +time([[Config for lualine.nvim]], true) +try_loadstring("\27LJ\2\n/\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\20plugins.lualine\frequire\0", "config", "lualine.nvim") +time([[Config for lualine.nvim]], false) +-- Config for: telescope.nvim +time([[Config for telescope.nvim]], true) +try_loadstring("\27LJ\2\n1\0\0\3\0\2\0\0046\0\0\0'\2\1\0B\0\2\1K\0\1\0\22plugins.telescope\frequire\0", "config", "telescope.nvim") +time([[Config for telescope.nvim]], false) +-- Config for: gopher.nvim +time([[Config for gopher.nvim]], true) +try_loadstring("\27LJ\2\n\v\0\0\1\0\0\0\1K\0\1\0\0", "config", "gopher.nvim") +time([[Config for gopher.nvim]], false) +-- Load plugins in order defined by `after` +time([[Sequenced loading]], true) +vim.cmd [[ packadd friendly-snippets ]] +vim.cmd [[ packadd LuaSnip ]] + +-- Config for: LuaSnip +try_loadstring("\27LJ\2\n\1\0\0\4\0\6\0\t6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\4\0005\3\3\0=\3\5\2B\0\2\1K\0\1\0\npaths\1\0\0\1\2\0\0A~/.local/share/nvim/site/pack/packer/start/friendly-snippets\tload luasnip/loaders/from_vscode\frequire\0", "config", "LuaSnip") + +time([[Sequenced loading]], false) + +_G._packer.inside_compile = false +if _G._packer.needs_bufread == true then + vim.cmd("doautocmd BufRead") +end +_G._packer.needs_bufread = false + +if should_profile then save_profiles() end + +end) + +if not no_errors then + error_msg = error_msg:gsub('"', '\\"') + vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') +end