remaster
This commit is contained in:
parent
1b949bdb01
commit
a90ea1f671
|
@ -0,0 +1,20 @@
|
||||||
|
-- Autocommands
|
||||||
|
|
||||||
|
-- Highlight on yank
|
||||||
|
vim.api.nvim_create_autocmd('TextYankPost', {
|
||||||
|
desc = 'Highlight when yanking (copying) text',
|
||||||
|
group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
|
||||||
|
callback = function()
|
||||||
|
vim.highlight.on_yank()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Set indentation for specific languages
|
||||||
|
vim.api.nvim_create_autocmd('FileType', {
|
||||||
|
pattern = { 'cs', 'go', 'rust' },
|
||||||
|
callback = function()
|
||||||
|
vim.opt_local.expandtab = true
|
||||||
|
vim.opt_local.shiftwidth = 4
|
||||||
|
vim.opt_local.tabstop = 4
|
||||||
|
end,
|
||||||
|
})
|
|
@ -0,0 +1,41 @@
|
||||||
|
-- Keymaps
|
||||||
|
vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
|
||||||
|
vim.keymap.set('n', '<leader>w', '<cmd>:w<CR>', { desc = 'Save File' })
|
||||||
|
vim.keymap.set('n', '<leader>pv', '<cmd>:Ex<CR>', { desc = 'Go back to Dir' })
|
||||||
|
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
|
||||||
|
vim.keymap.set('t', '<Esc><Esc>', '<C-\\><C-n>', { desc = 'Exit terminal mode' })
|
||||||
|
|
||||||
|
-- Disable arrow keys
|
||||||
|
vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>')
|
||||||
|
vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>')
|
||||||
|
vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>')
|
||||||
|
vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>')
|
||||||
|
|
||||||
|
-- Window navigation
|
||||||
|
vim.keymap.set('n', '<C-h>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
|
||||||
|
vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
|
||||||
|
vim.keymap.set('n', '<C-j>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
|
||||||
|
vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })
|
||||||
|
|
||||||
|
-- Auto-close brackets
|
||||||
|
vim.keymap.set('i', '(', '()<Left>')
|
||||||
|
vim.keymap.set('i', '[', '[]<Left>')
|
||||||
|
vim.keymap.set('i', '{', '{}<Left>')
|
||||||
|
vim.keymap.set('i', '"', '""<Left>')
|
||||||
|
vim.keymap.set('i', "'", "''<Left>")
|
||||||
|
|
||||||
|
-- Smart enter for brackets
|
||||||
|
vim.keymap.set('i', '<CR>', function()
|
||||||
|
local line = vim.api.nvim_get_current_line()
|
||||||
|
local col = vim.api.nvim_win_get_cursor(0)[2]
|
||||||
|
local before = line:sub(col, col)
|
||||||
|
local after = line:sub(col + 1, col + 1)
|
||||||
|
|
||||||
|
if (before == '{' and after == '}') or
|
||||||
|
(before == '[' and after == ']') or
|
||||||
|
(before == '(' and after == ')') then
|
||||||
|
return '<CR><CR><Up><Tab>'
|
||||||
|
else
|
||||||
|
return '<CR>'
|
||||||
|
end
|
||||||
|
end, { expr = true })
|
|
@ -0,0 +1,31 @@
|
||||||
|
-- Bootstrap lazy.nvim
|
||||||
|
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
|
||||||
|
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||||
|
local lazyrepo = 'https://github.com/folke/lazy.nvim.git'
|
||||||
|
local out = vim.fn.system { 'git', 'clone', '--filter=blob:none', '--branch=stable', lazyrepo, lazypath }
|
||||||
|
if vim.v.shell_error ~= 0 then
|
||||||
|
error('Error cloning lazy.nvim:\n' .. out)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
vim.opt.rtp:prepend(lazypath)
|
||||||
|
|
||||||
|
-- Setup lazy.nvim
|
||||||
|
require('lazy').setup('plugins', {
|
||||||
|
ui = {
|
||||||
|
icons = vim.g.have_nerd_font and {} or {
|
||||||
|
cmd = '⌘',
|
||||||
|
config = '🛠',
|
||||||
|
event = '📅',
|
||||||
|
ft = '📂',
|
||||||
|
init = '⚙',
|
||||||
|
keys = '🗝',
|
||||||
|
plugin = '🔌',
|
||||||
|
runtime = '💻',
|
||||||
|
require = '🌙',
|
||||||
|
source = '📄',
|
||||||
|
start = '🚀',
|
||||||
|
task = '📌',
|
||||||
|
lazy = '💤 ',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
|
@ -0,0 +1,36 @@
|
||||||
|
-- Options
|
||||||
|
vim.opt.number = true
|
||||||
|
vim.opt.relativenumber = true
|
||||||
|
vim.opt.mouse = ''
|
||||||
|
vim.opt.showmode = false
|
||||||
|
|
||||||
|
vim.schedule(function()
|
||||||
|
vim.opt.clipboard = 'unnamedplus'
|
||||||
|
end)
|
||||||
|
|
||||||
|
vim.opt.breakindent = true
|
||||||
|
vim.opt.undofile = true
|
||||||
|
vim.opt.ignorecase = true
|
||||||
|
vim.opt.smartcase = true
|
||||||
|
vim.opt.signcolumn = 'yes'
|
||||||
|
vim.opt.updatetime = 250
|
||||||
|
vim.opt.timeoutlen = 300
|
||||||
|
|
||||||
|
-- Enable inline diagnostics
|
||||||
|
vim.diagnostic.config({
|
||||||
|
virtual_text = {
|
||||||
|
prefix = '●',
|
||||||
|
source = 'always',
|
||||||
|
},
|
||||||
|
signs = true,
|
||||||
|
underline = true,
|
||||||
|
update_in_insert = false,
|
||||||
|
severity_sort = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.opt.splitright = true
|
||||||
|
vim.opt.splitbelow = true
|
||||||
|
vim.opt.list = false
|
||||||
|
vim.opt.inccommand = 'split'
|
||||||
|
vim.opt.cursorline = true
|
||||||
|
vim.opt.scrolloff = 10
|
|
@ -1,9 +0,0 @@
|
||||||
return {
|
|
||||||
{ -- Add indentation guides even on blank lines
|
|
||||||
'lukas-reineke/indent-blankline.nvim',
|
|
||||||
-- Enable `lukas-reineke/indent-blankline.nvim`
|
|
||||||
-- See `:help ibl`
|
|
||||||
main = 'ibl',
|
|
||||||
opts = {},
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
-- Autocompletion
|
||||||
|
return {
|
||||||
|
'hrsh7th/nvim-cmp',
|
||||||
|
event = 'InsertEnter',
|
||||||
|
dependencies = {
|
||||||
|
{
|
||||||
|
'L3MON4D3/LuaSnip',
|
||||||
|
build = (function()
|
||||||
|
if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return 'make install_jsregexp'
|
||||||
|
end)(),
|
||||||
|
config = function()
|
||||||
|
require('luasnip.loaders.from_lua').load { paths = { '~/.config/nvim/snippets/' } }
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
'saadparwaiz1/cmp_luasnip',
|
||||||
|
'hrsh7th/cmp-nvim-lsp',
|
||||||
|
'hrsh7th/cmp-path',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
local cmp = require 'cmp'
|
||||||
|
local luasnip = require 'luasnip'
|
||||||
|
luasnip.config.setup {}
|
||||||
|
|
||||||
|
cmp.setup {
|
||||||
|
snippet = {
|
||||||
|
expand = function(args)
|
||||||
|
luasnip.lsp_expand(args.body)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
completion = { completeopt = 'menu,menuone,noinsert' },
|
||||||
|
preselect = require('cmp').PreselectMode.None,
|
||||||
|
mapping = cmp.mapping.preset.insert {
|
||||||
|
['<C-n>'] = cmp.mapping.select_next_item(),
|
||||||
|
['<C-p>'] = cmp.mapping.select_prev_item(),
|
||||||
|
['<C-j>'] = cmp.mapping.select_next_item(),
|
||||||
|
['<C-k>'] = cmp.mapping.select_prev_item(),
|
||||||
|
['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
||||||
|
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
||||||
|
['<Tab>'] = cmp.mapping(function(fallback)
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.confirm({ select = true })
|
||||||
|
elseif luasnip.expand_or_locally_jumpable() then
|
||||||
|
luasnip.expand_or_jump()
|
||||||
|
else
|
||||||
|
fallback()
|
||||||
|
end
|
||||||
|
end, { 'i', 's' }),
|
||||||
|
['<C-Space>'] = cmp.mapping.complete {},
|
||||||
|
['<C-l>'] = cmp.mapping(function()
|
||||||
|
if luasnip.expand_or_locally_jumpable() then
|
||||||
|
luasnip.expand_or_jump()
|
||||||
|
end
|
||||||
|
end, { 'i', 's' }),
|
||||||
|
['<C-h>'] = cmp.mapping(function()
|
||||||
|
if luasnip.locally_jumpable(-1) then
|
||||||
|
luasnip.jump(-1)
|
||||||
|
end
|
||||||
|
end, { 'i', 's' }),
|
||||||
|
},
|
||||||
|
sources = {
|
||||||
|
{
|
||||||
|
name = 'lazydev',
|
||||||
|
group_index = 0,
|
||||||
|
},
|
||||||
|
{ name = 'luasnip', priority = 1000 },
|
||||||
|
{ name = 'nvim_lsp', priority = 800 },
|
||||||
|
{ name = 'path', priority = 300 },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
-- Core plugins
|
||||||
|
return {
|
||||||
|
'tpope/vim-sleuth',
|
||||||
|
|
||||||
|
{
|
||||||
|
'lewis6991/gitsigns.nvim',
|
||||||
|
opts = {
|
||||||
|
signs = {
|
||||||
|
add = { text = '+' },
|
||||||
|
change = { text = '~' },
|
||||||
|
delete = { text = '_' },
|
||||||
|
topdelete = { text = '‾' },
|
||||||
|
changedelete = { text = '~' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{ 'folke/todo-comments.nvim', event = 'VimEnter', dependencies = { 'nvim-lua/plenary.nvim' }, opts = { signs = false } },
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
-- Code formatting
|
||||||
|
return {
|
||||||
|
'stevearc/conform.nvim',
|
||||||
|
event = { 'BufWritePre' },
|
||||||
|
cmd = { 'ConformInfo' },
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
'<leader>f',
|
||||||
|
function()
|
||||||
|
require('conform').format { async = true, lsp_format = 'fallback' }
|
||||||
|
end,
|
||||||
|
mode = '',
|
||||||
|
desc = '[F]ormat buffer',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
notify_on_error = false,
|
||||||
|
formatters = {
|
||||||
|
csharpier = {
|
||||||
|
command = 'csharpier',
|
||||||
|
args = { 'format', '$FILENAME' },
|
||||||
|
stdin = false,
|
||||||
|
tmpfile_format = '.cs',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
format_on_save = function(bufnr)
|
||||||
|
local disable_filetypes = { c = true, cpp = true }
|
||||||
|
local lsp_format_opt
|
||||||
|
if disable_filetypes[vim.bo[bufnr].filetype] then
|
||||||
|
lsp_format_opt = 'never'
|
||||||
|
else
|
||||||
|
lsp_format_opt = 'fallback'
|
||||||
|
end
|
||||||
|
return {
|
||||||
|
timeout_ms = 500,
|
||||||
|
lsp_format = lsp_format_opt,
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
formatters_by_ft = {
|
||||||
|
lua = { 'stylua' },
|
||||||
|
-- cs = { 'csharpier' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
-- Harpoon for quick file navigation
|
||||||
|
return {
|
||||||
|
'ThePrimeagen/harpoon',
|
||||||
|
branch = 'harpoon2',
|
||||||
|
dependencies = { 'nvim-lua/plenary.nvim' },
|
||||||
|
config = function()
|
||||||
|
local harpoon = require 'harpoon'
|
||||||
|
harpoon:setup()
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>A', function()
|
||||||
|
harpoon:list():add()
|
||||||
|
end, { desc = 'Add a file to harpoon' })
|
||||||
|
vim.keymap.set('n', '<leader>a', function()
|
||||||
|
harpoon.ui:toggle_quick_menu(harpoon:list())
|
||||||
|
end, { desc = 'Open harpoon nav' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>1', function()
|
||||||
|
harpoon:list():select(1)
|
||||||
|
end, { desc = 'Go to file 1' })
|
||||||
|
vim.keymap.set('n', '<leader>2', function()
|
||||||
|
harpoon:list():select(2)
|
||||||
|
end, { desc = 'Go to file 2' })
|
||||||
|
vim.keymap.set('n', '<leader>3', function()
|
||||||
|
harpoon:list():select(3)
|
||||||
|
end, { desc = 'Go to file 3' })
|
||||||
|
vim.keymap.set('n', '<leader>4', function()
|
||||||
|
harpoon:list():select(4)
|
||||||
|
end, { desc = 'Go to file 4' })
|
||||||
|
vim.keymap.set('n', '<leader>5', function()
|
||||||
|
harpoon:list():select(5)
|
||||||
|
end, { desc = 'Go to file 5' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<C-S-P>', function()
|
||||||
|
harpoon:list():prev()
|
||||||
|
end)
|
||||||
|
vim.keymap.set('n', '<C-S-N>', function()
|
||||||
|
harpoon:list():next()
|
||||||
|
end)
|
||||||
|
|
||||||
|
local conf = require('telescope.config').values
|
||||||
|
local function toggle_telescope(harpoon_files)
|
||||||
|
local file_paths = {}
|
||||||
|
for _, item in ipairs(harpoon_files.items) do
|
||||||
|
table.insert(file_paths, item.value)
|
||||||
|
end
|
||||||
|
|
||||||
|
require('telescope.pickers')
|
||||||
|
.new({}, {
|
||||||
|
prompt_title = 'Harpoon',
|
||||||
|
finder = require('telescope.finders').new_table {
|
||||||
|
results = file_paths,
|
||||||
|
},
|
||||||
|
previewer = conf.file_previewer {},
|
||||||
|
sorter = conf.generic_sorter {},
|
||||||
|
})
|
||||||
|
:find()
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>z', function()
|
||||||
|
toggle_telescope(harpoon:list())
|
||||||
|
end, { desc = 'Open harpoon window in telescope' })
|
||||||
|
end,
|
||||||
|
}
|
|
@ -0,0 +1,112 @@
|
||||||
|
-- LSP configuration
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'folke/lazydev.nvim',
|
||||||
|
ft = 'lua',
|
||||||
|
opts = {
|
||||||
|
library = {
|
||||||
|
{ path = 'luvit-meta/library', words = { 'vim%.uv' } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ 'Bilal2453/luvit-meta', lazy = true },
|
||||||
|
|
||||||
|
{
|
||||||
|
'neovim/nvim-lspconfig',
|
||||||
|
dependencies = {
|
||||||
|
{ 'williamboman/mason.nvim', config = true },
|
||||||
|
'williamboman/mason-lspconfig.nvim',
|
||||||
|
'WhoIsSethDaniel/mason-tool-installer.nvim',
|
||||||
|
{ 'j-hui/fidget.nvim', opts = {} },
|
||||||
|
'hrsh7th/cmp-nvim-lsp',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
vim.api.nvim_create_autocmd('LspAttach', {
|
||||||
|
group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
|
||||||
|
callback = function(event)
|
||||||
|
local map = function(keys, func, desc, mode)
|
||||||
|
mode = mode or 'n'
|
||||||
|
vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
|
||||||
|
end
|
||||||
|
|
||||||
|
map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
|
||||||
|
map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
|
||||||
|
map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
|
||||||
|
map('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition')
|
||||||
|
map('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
|
||||||
|
map('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
|
||||||
|
map('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
|
||||||
|
map('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction', { 'n', 'x' })
|
||||||
|
map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
|
||||||
|
|
||||||
|
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||||
|
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then
|
||||||
|
local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false })
|
||||||
|
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
|
||||||
|
buffer = event.buf,
|
||||||
|
group = highlight_augroup,
|
||||||
|
callback = vim.lsp.buf.document_highlight,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
|
||||||
|
buffer = event.buf,
|
||||||
|
group = highlight_augroup,
|
||||||
|
callback = vim.lsp.buf.clear_references,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd('LspDetach', {
|
||||||
|
group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }),
|
||||||
|
callback = function(event2)
|
||||||
|
vim.lsp.buf.clear_references()
|
||||||
|
vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf }
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then
|
||||||
|
map('<leader>th', function()
|
||||||
|
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf })
|
||||||
|
end, '[T]oggle Inlay [H]ints')
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())
|
||||||
|
|
||||||
|
local servers = {
|
||||||
|
omnisharp = {
|
||||||
|
cmd = { 'omnisharp-mono' },
|
||||||
|
},
|
||||||
|
lua_ls = {
|
||||||
|
settings = {
|
||||||
|
Lua = {
|
||||||
|
completion = {
|
||||||
|
callSnippet = 'Replace',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
require('mason').setup()
|
||||||
|
|
||||||
|
local ensure_installed = vim.tbl_keys(servers or {})
|
||||||
|
vim.list_extend(ensure_installed, {
|
||||||
|
'stylua',
|
||||||
|
'csharpier',
|
||||||
|
})
|
||||||
|
require('mason-tool-installer').setup { ensure_installed = ensure_installed }
|
||||||
|
|
||||||
|
require('mason-lspconfig').setup {
|
||||||
|
handlers = {
|
||||||
|
function(server_name)
|
||||||
|
local server = servers[server_name] or {}
|
||||||
|
server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
|
||||||
|
require('lspconfig')[server_name].setup(server)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
-- Telescope fuzzy finder
|
||||||
|
return {
|
||||||
|
'nvim-telescope/telescope.nvim',
|
||||||
|
event = 'VimEnter',
|
||||||
|
branch = '0.1.x',
|
||||||
|
dependencies = {
|
||||||
|
'nvim-lua/plenary.nvim',
|
||||||
|
{
|
||||||
|
'nvim-telescope/telescope-fzf-native.nvim',
|
||||||
|
build = 'make',
|
||||||
|
cond = function()
|
||||||
|
return vim.fn.executable 'make' == 1
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{ 'nvim-telescope/telescope-ui-select.nvim' },
|
||||||
|
{ 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font },
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
require('telescope').setup {
|
||||||
|
extensions = {
|
||||||
|
['ui-select'] = {
|
||||||
|
require('telescope.themes').get_dropdown(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
pcall(require('telescope').load_extension, 'fzf')
|
||||||
|
pcall(require('telescope').load_extension, 'ui-select')
|
||||||
|
|
||||||
|
local builtin = require 'telescope.builtin'
|
||||||
|
vim.keymap.set('n', '<leader>sh', builtin.help_tags, { desc = '[S]earch [H]elp' })
|
||||||
|
vim.keymap.set('n', '<leader>sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' })
|
||||||
|
vim.keymap.set('n', '<leader>sf', builtin.find_files, { desc = '[S]earch [F]iles' })
|
||||||
|
vim.keymap.set('n', '<leader>ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' })
|
||||||
|
vim.keymap.set('n', '<leader>sw', builtin.grep_string, { desc = '[S]earch current [W]ord' })
|
||||||
|
vim.keymap.set('n', '<leader>sg', builtin.live_grep, { desc = '[S]earch by [G]rep' })
|
||||||
|
vim.keymap.set('n', '<leader>sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' })
|
||||||
|
vim.keymap.set('n', '<leader>sr', builtin.resume, { desc = '[S]earch [R]esume' })
|
||||||
|
vim.keymap.set('n', '<leader>s.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
|
||||||
|
vim.keymap.set('n', '<leader><leader>', builtin.buffers, { desc = '[ ] Find existing buffers' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>/', function()
|
||||||
|
builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown {
|
||||||
|
winblend = 10,
|
||||||
|
previewer = false,
|
||||||
|
})
|
||||||
|
end, { desc = '[/] Fuzzily search in current buffer' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>s/', function()
|
||||||
|
builtin.live_grep {
|
||||||
|
grep_open_files = true,
|
||||||
|
prompt_title = 'Live Grep in Open Files',
|
||||||
|
}
|
||||||
|
end, { desc = '[S]earch [/] in Open Files' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>sn', function()
|
||||||
|
builtin.find_files { cwd = vim.fn.stdpath 'config' }
|
||||||
|
end, { desc = '[S]earch [N]eovim files' })
|
||||||
|
end,
|
||||||
|
}
|
|
@ -0,0 +1,233 @@
|
||||||
|
-- Custom theme
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
name = 'vague-theme',
|
||||||
|
dir = vim.fn.stdpath('config'),
|
||||||
|
config = function()
|
||||||
|
-- Vague theme
|
||||||
|
local function setup_vague_theme()
|
||||||
|
vim.cmd 'highlight clear'
|
||||||
|
if vim.fn.exists 'syntax_on' == 1 then
|
||||||
|
vim.cmd 'syntax reset'
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.o.background = 'dark'
|
||||||
|
vim.g.colors_name = 'vague'
|
||||||
|
|
||||||
|
local c = {
|
||||||
|
black = '#000000',
|
||||||
|
dark_gray = '#1b1c1d',
|
||||||
|
gray = '#2d2d30',
|
||||||
|
light_gray = '#5c5c6e',
|
||||||
|
white = '#cdcdcd',
|
||||||
|
foreground = '#be8c8c',
|
||||||
|
cursor = '#c2c2c2',
|
||||||
|
line_bg = '#282830',
|
||||||
|
active_fg = '#deb896',
|
||||||
|
focus_fg = '#ddb795',
|
||||||
|
property = '#b6c4dc',
|
||||||
|
number = '#C2966B',
|
||||||
|
parameter = '#b8a2ba',
|
||||||
|
class = '#b06767',
|
||||||
|
namespace = '#748fa7',
|
||||||
|
keyword = '#7894AB',
|
||||||
|
control_kw = '#748fa7',
|
||||||
|
interface = '#d57d7d',
|
||||||
|
func = '#be8c8c',
|
||||||
|
operator = '#CDCDCD',
|
||||||
|
string = '#deb896',
|
||||||
|
comment = '#8c8c8c',
|
||||||
|
error = '#d2788c',
|
||||||
|
warning = '#e6be8c',
|
||||||
|
info = '#61a0c4',
|
||||||
|
}
|
||||||
|
|
||||||
|
local function hi(group, fg, bg, attr)
|
||||||
|
local cmd = 'highlight ' .. group
|
||||||
|
if fg and fg ~= '' then
|
||||||
|
cmd = cmd .. ' guifg=' .. fg
|
||||||
|
end
|
||||||
|
if bg and bg ~= '' then
|
||||||
|
cmd = cmd .. ' guibg=' .. bg
|
||||||
|
end
|
||||||
|
if attr and attr ~= '' then
|
||||||
|
cmd = cmd .. ' gui=' .. attr
|
||||||
|
end
|
||||||
|
vim.cmd(cmd)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Basic highlights
|
||||||
|
hi('Normal', c.white, c.black, '')
|
||||||
|
hi('Cursor', c.black, c.cursor, '')
|
||||||
|
hi('CursorLine', '', c.line_bg, '')
|
||||||
|
hi('CursorColumn', '', c.line_bg, '')
|
||||||
|
hi('LineNr', c.light_gray, '', '')
|
||||||
|
hi('CursorLineNr', c.focus_fg, '', 'bold')
|
||||||
|
hi('Visual', '', '#3d3d3d28', '')
|
||||||
|
hi('VisualNOS', '', '#3d3d3d28', '')
|
||||||
|
hi('Search', c.black, c.number, '')
|
||||||
|
hi('IncSearch', c.black, c.active_fg, '')
|
||||||
|
hi('MatchParen', '', '#0064001a', '')
|
||||||
|
hi('VertSplit', c.gray, '', '')
|
||||||
|
hi('WinSeparator', c.gray, '', '')
|
||||||
|
hi('StatusLine', c.active_fg, c.black, '')
|
||||||
|
hi('StatusLineNC', c.foreground, c.black, '')
|
||||||
|
hi('TabLine', c.foreground, c.black, '')
|
||||||
|
hi('TabLineFill', '', c.black, '')
|
||||||
|
hi('TabLineSel', c.active_fg, c.black, 'bold')
|
||||||
|
hi('Pmenu', c.warning, c.black, '')
|
||||||
|
hi('PmenuSel', c.active_fg, '#232426', '')
|
||||||
|
hi('PmenuSbar', '', c.gray, '')
|
||||||
|
hi('PmenuThumb', '', c.light_gray, '')
|
||||||
|
hi('FloatBorder', c.gray, '', '')
|
||||||
|
hi('NormalFloat', c.white, c.black, '')
|
||||||
|
hi('Folded', c.comment, '#8484841c', '')
|
||||||
|
hi('FoldColumn', c.light_gray, '', '')
|
||||||
|
hi('DiffAdd', '', '#587c0c4c', '')
|
||||||
|
hi('DiffChange', '', '#0c7d9d52', '')
|
||||||
|
hi('DiffDelete', '', '#94151b54', '')
|
||||||
|
hi('DiffText', '', '#bcbcbc14', '')
|
||||||
|
hi('DiagnosticError', c.error, '', '')
|
||||||
|
hi('DiagnosticWarn', c.warning, '', '')
|
||||||
|
hi('DiagnosticInfo', c.info, '', '')
|
||||||
|
hi('DiagnosticHint', c.comment, '', '')
|
||||||
|
hi('ErrorMsg', c.error, '', '')
|
||||||
|
hi('WarningMsg', c.warning, '', '')
|
||||||
|
hi('ModeMsg', c.active_fg, '', '')
|
||||||
|
hi('MoreMsg', c.active_fg, '', '')
|
||||||
|
hi('Question', c.active_fg, '', '')
|
||||||
|
|
||||||
|
-- Syntax
|
||||||
|
hi('Comment', c.comment, '', 'italic')
|
||||||
|
hi('Constant', c.number, '', '')
|
||||||
|
hi('String', c.string, '', '')
|
||||||
|
hi('Character', c.string, '', '')
|
||||||
|
hi('Number', c.number, '', '')
|
||||||
|
hi('Boolean', c.number, '', '')
|
||||||
|
hi('Float', c.number, '', '')
|
||||||
|
hi('Identifier', c.property, '', '')
|
||||||
|
hi('Function', c.func, '', '')
|
||||||
|
hi('Statement', c.keyword, '', '')
|
||||||
|
hi('Conditional', c.control_kw, '', '')
|
||||||
|
hi('Repeat', c.control_kw, '', '')
|
||||||
|
hi('Label', c.keyword, '', '')
|
||||||
|
hi('Operator', c.operator, '', '')
|
||||||
|
hi('Keyword', c.keyword, '', '')
|
||||||
|
hi('Exception', c.control_kw, '', '')
|
||||||
|
hi('PreProc', c.keyword, '', '')
|
||||||
|
hi('Include', c.keyword, '', '')
|
||||||
|
hi('Define', c.keyword, '', '')
|
||||||
|
hi('Macro', c.keyword, '', '')
|
||||||
|
hi('PreCondit', c.keyword, '', '')
|
||||||
|
hi('Type', c.class, '', '')
|
||||||
|
hi('StorageClass', c.keyword, '', '')
|
||||||
|
hi('Structure', c.class, '', '')
|
||||||
|
hi('Typedef', c.class, '', '')
|
||||||
|
hi('Special', c.operator, '', '')
|
||||||
|
hi('SpecialChar', c.operator, '', '')
|
||||||
|
hi('Tag', c.class, '', '')
|
||||||
|
hi('Delimiter', c.operator, '', '')
|
||||||
|
hi('SpecialComment', c.comment, '', 'bold')
|
||||||
|
hi('Debug', c.error, '', '')
|
||||||
|
|
||||||
|
-- TreeSitter
|
||||||
|
hi('@variable', c.white, '', '')
|
||||||
|
hi('@variable.builtin', c.class, '', '')
|
||||||
|
hi('@variable.parameter', c.parameter, '', '')
|
||||||
|
hi('@variable.member', c.property, '', '')
|
||||||
|
hi('@constant', c.number, '', '')
|
||||||
|
hi('@constant.builtin', c.number, '', '')
|
||||||
|
hi('@constant.macro', c.keyword, '', '')
|
||||||
|
hi('@string', c.string, '', '')
|
||||||
|
hi('@string.escape', c.operator, '', '')
|
||||||
|
hi('@string.special', c.operator, '', '')
|
||||||
|
hi('@character', c.string, '', '')
|
||||||
|
hi('@character.special', c.operator, '', '')
|
||||||
|
hi('@number', c.number, '', '')
|
||||||
|
hi('@boolean', c.number, '', '')
|
||||||
|
hi('@float', c.number, '', '')
|
||||||
|
hi('@function', c.func, '', '')
|
||||||
|
hi('@function.builtin', c.func, '', '')
|
||||||
|
hi('@function.call', c.func, '', '')
|
||||||
|
hi('@function.macro', c.func, '', '')
|
||||||
|
hi('@method', c.func, '', '')
|
||||||
|
hi('@method.call', c.func, '', '')
|
||||||
|
hi('@constructor', c.class, '', '')
|
||||||
|
hi('@parameter', c.parameter, '', '')
|
||||||
|
hi('@keyword', c.keyword, '', '')
|
||||||
|
hi('@keyword.function', c.keyword, '', '')
|
||||||
|
hi('@keyword.operator', c.keyword, '', '')
|
||||||
|
hi('@keyword.return', c.control_kw, '', '')
|
||||||
|
hi('@keyword.conditional', c.control_kw, '', '')
|
||||||
|
hi('@keyword.repeat', c.control_kw, '', '')
|
||||||
|
hi('@keyword.exception', c.control_kw, '', '')
|
||||||
|
hi('@operator', c.operator, '', '')
|
||||||
|
hi('@punctuation.delimiter', c.operator, '', '')
|
||||||
|
hi('@punctuation.bracket', c.operator, '', '')
|
||||||
|
hi('@punctuation.special', c.operator, '', '')
|
||||||
|
hi('@type', c.class, '', '')
|
||||||
|
hi('@type.builtin', c.class, '', '')
|
||||||
|
hi('@type.definition', c.class, '', '')
|
||||||
|
hi('@type.qualifier', c.keyword, '', '')
|
||||||
|
hi('@property', c.property, '', '')
|
||||||
|
hi('@field', c.property, '', '')
|
||||||
|
hi('@namespace', c.namespace, '', '')
|
||||||
|
hi('@module', c.namespace, '', '')
|
||||||
|
hi('@label', c.keyword, '', '')
|
||||||
|
hi('@comment', c.comment, '', 'italic')
|
||||||
|
hi('@tag', c.class, '', '')
|
||||||
|
hi('@tag.attribute', c.property, '', '')
|
||||||
|
hi('@tag.delimiter', c.operator, '', '')
|
||||||
|
|
||||||
|
-- LSP
|
||||||
|
hi('@lsp.type.class', c.class, '', '')
|
||||||
|
hi('@lsp.type.interface', c.interface, '', '')
|
||||||
|
hi('@lsp.type.namespace', c.namespace, '', '')
|
||||||
|
hi('@lsp.type.parameter', c.parameter, '', '')
|
||||||
|
hi('@lsp.type.property', c.property, '', '')
|
||||||
|
hi('@lsp.type.variable', c.white, '', '')
|
||||||
|
hi('@lsp.type.function', c.func, '', '')
|
||||||
|
hi('@lsp.type.method', c.func, '', '')
|
||||||
|
hi('@lsp.type.macro', c.func, '', '')
|
||||||
|
hi('@lsp.mod.defaultLibrary', c.func, '', '')
|
||||||
|
hi('LspSignatureActiveParameter', c.parameter, '', 'bold')
|
||||||
|
hi('LspCodeLens', c.comment, '', '')
|
||||||
|
hi('LspInlayHint', c.comment, '', 'italic')
|
||||||
|
|
||||||
|
-- Telescope
|
||||||
|
hi('TelescopeNormal', c.white, c.black, '')
|
||||||
|
hi('TelescopeBorder', c.gray, '', '')
|
||||||
|
hi('TelescopeSelection', c.active_fg, '#232426', '')
|
||||||
|
hi('TelescopeSelectionCaret', c.active_fg, '', '')
|
||||||
|
hi('TelescopeMatching', c.number, '', '')
|
||||||
|
|
||||||
|
-- Which-key
|
||||||
|
hi('WhichKey', c.property, '', '')
|
||||||
|
hi('WhichKeyGroup', c.class, '', '')
|
||||||
|
hi('WhichKeyDesc', c.white, '', '')
|
||||||
|
hi('WhichKeyFloat', '', c.black, '')
|
||||||
|
hi('WhichKeyBorder', c.gray, '', '')
|
||||||
|
|
||||||
|
-- Terminal colors
|
||||||
|
vim.g.terminal_color_0 = c.black
|
||||||
|
vim.g.terminal_color_1 = '#cd3131'
|
||||||
|
vim.g.terminal_color_2 = '#0dbc79'
|
||||||
|
vim.g.terminal_color_3 = '#e5e510'
|
||||||
|
vim.g.terminal_color_4 = '#2472c8'
|
||||||
|
vim.g.terminal_color_5 = '#bc3fbc'
|
||||||
|
vim.g.terminal_color_6 = '#11a8cd'
|
||||||
|
vim.g.terminal_color_7 = '#e5e5e5'
|
||||||
|
vim.g.terminal_color_8 = '#666666'
|
||||||
|
vim.g.terminal_color_9 = '#f14c4c'
|
||||||
|
vim.g.terminal_color_10 = '#23d18b'
|
||||||
|
vim.g.terminal_color_11 = '#f5f543'
|
||||||
|
vim.g.terminal_color_12 = '#3b8eea'
|
||||||
|
vim.g.terminal_color_13 = '#d670d6'
|
||||||
|
vim.g.terminal_color_14 = '#29b8db'
|
||||||
|
vim.g.terminal_color_15 = '#e5e5e5'
|
||||||
|
end
|
||||||
|
|
||||||
|
setup_vague_theme()
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
-- Treesitter for syntax highlighting
|
||||||
|
return {
|
||||||
|
'nvim-treesitter/nvim-treesitter',
|
||||||
|
build = ':TSUpdate',
|
||||||
|
main = 'nvim-treesitter.configs',
|
||||||
|
opts = {
|
||||||
|
ensure_installed = { 'bash', 'c', 'c_sharp', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc' },
|
||||||
|
auto_install = true,
|
||||||
|
highlight = {
|
||||||
|
enable = true,
|
||||||
|
additional_vim_regex_highlighting = { 'ruby' },
|
||||||
|
},
|
||||||
|
indent = { enable = true, disable = { 'ruby' } },
|
||||||
|
},
|
||||||
|
}
|
|
@ -0,0 +1,163 @@
|
||||||
|
-- UI plugins
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'folke/which-key.nvim',
|
||||||
|
event = 'VimEnter',
|
||||||
|
opts = {
|
||||||
|
icons = {
|
||||||
|
mappings = vim.g.have_nerd_font,
|
||||||
|
keys = vim.g.have_nerd_font and {} or {
|
||||||
|
Up = '<Up> ',
|
||||||
|
Down = '<Down> ',
|
||||||
|
Left = '<Left> ',
|
||||||
|
Right = '<Right> ',
|
||||||
|
C = '<C-…> ',
|
||||||
|
M = '<M-…> ',
|
||||||
|
D = '<D-…> ',
|
||||||
|
S = '<S-…> ',
|
||||||
|
CR = '<CR> ',
|
||||||
|
Esc = '<Esc> ',
|
||||||
|
ScrollWheelDown = '<ScrollWheelDown> ',
|
||||||
|
ScrollWheelUp = '<ScrollWheelUp> ',
|
||||||
|
NL = '<NL> ',
|
||||||
|
BS = '<BS> ',
|
||||||
|
Space = '<Space> ',
|
||||||
|
Tab = '<Tab> ',
|
||||||
|
F1 = '<F1>',
|
||||||
|
F2 = '<F2>',
|
||||||
|
F3 = '<F3>',
|
||||||
|
F4 = '<F4>',
|
||||||
|
F5 = '<F5>',
|
||||||
|
F6 = '<F6>',
|
||||||
|
F7 = '<F7>',
|
||||||
|
F8 = '<F8>',
|
||||||
|
F9 = '<F9>',
|
||||||
|
F10 = '<F10>',
|
||||||
|
F11 = '<F11>',
|
||||||
|
F12 = '<F12>',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
spec = {
|
||||||
|
-- Groups
|
||||||
|
{ '<leader>c', group = '[C]ode', mode = { 'n', 'x' } },
|
||||||
|
{ '<leader>d', group = '[D]ocument' },
|
||||||
|
{ '<leader>r', group = '[R]ename' },
|
||||||
|
{ '<leader>s', group = '[S]earch' },
|
||||||
|
{ '<leader>W', group = '[W]orkspace' },
|
||||||
|
{ '<leader>t', group = '[T]oggle' },
|
||||||
|
{ '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } },
|
||||||
|
|
||||||
|
-- General keybinds
|
||||||
|
{ '<leader>w', desc = 'Save File' },
|
||||||
|
{ '<leader>pv', desc = 'Go back to Dir' },
|
||||||
|
{ '<leader>q', desc = 'Open diagnostic quickfix list' },
|
||||||
|
{ '<leader>f', desc = 'Format buffer', mode = { 'n', 'v' } },
|
||||||
|
|
||||||
|
-- LSP keybinds
|
||||||
|
{ '<leader>D', desc = 'Type Definition' },
|
||||||
|
{ '<leader>ds', desc = 'Document Symbols' },
|
||||||
|
{ '<leader>ws', desc = 'Workspace Symbols' },
|
||||||
|
{ '<leader>rn', desc = 'Rename' },
|
||||||
|
{ '<leader>ca', desc = 'Code Action', mode = { 'n', 'v' } },
|
||||||
|
{ '<leader>th', desc = 'Toggle Inlay Hints' },
|
||||||
|
|
||||||
|
-- Harpoon keybinds
|
||||||
|
{ '<leader>A', desc = 'Add file to harpoon' },
|
||||||
|
{ '<leader>a', desc = 'Open harpoon nav' },
|
||||||
|
{ '<leader>1', desc = 'Go to file 1' },
|
||||||
|
{ '<leader>2', desc = 'Go to file 2' },
|
||||||
|
{ '<leader>3', desc = 'Go to file 3' },
|
||||||
|
{ '<leader>4', desc = 'Go to file 4' },
|
||||||
|
{ '<leader>5', desc = 'Go to file 5' },
|
||||||
|
{ '<leader>z', desc = 'Open harpoon in telescope' },
|
||||||
|
|
||||||
|
-- Telescope search keybinds
|
||||||
|
{ '<leader>sh', desc = 'Search Help' },
|
||||||
|
{ '<leader>sk', desc = 'Search Keymaps' },
|
||||||
|
{ '<leader>sf', desc = 'Search Files' },
|
||||||
|
{ '<leader>ss', desc = 'Search Select Telescope' },
|
||||||
|
{ '<leader>sw', desc = 'Search current Word' },
|
||||||
|
{ '<leader>sg', desc = 'Search by Grep' },
|
||||||
|
{ '<leader>sd', desc = 'Search Diagnostics' },
|
||||||
|
{ '<leader>sr', desc = 'Search Resume' },
|
||||||
|
{ '<leader>s.', desc = 'Search Recent Files' },
|
||||||
|
{ '<leader><leader>', desc = 'Find existing buffers' },
|
||||||
|
{ '<leader>/', desc = 'Fuzzily search in current buffer' },
|
||||||
|
{ '<leader>s/', desc = 'Search in Open Files' },
|
||||||
|
{ '<leader>sn', desc = 'Search Neovim files' },
|
||||||
|
|
||||||
|
-- Debug keybinds
|
||||||
|
{ '<leader>b', desc = 'Debug: Toggle Breakpoint' },
|
||||||
|
{ '<leader>B', desc = 'Debug: Set Breakpoint' },
|
||||||
|
|
||||||
|
-- Git hunk actions
|
||||||
|
{ '<leader>hs', desc = 'Stage hunk', mode = { 'n', 'v' } },
|
||||||
|
{ '<leader>hr', desc = 'Reset hunk', mode = { 'n', 'v' } },
|
||||||
|
{ '<leader>hS', desc = 'Stage buffer' },
|
||||||
|
{ '<leader>hu', desc = 'Undo stage hunk' },
|
||||||
|
{ '<leader>hR', desc = 'Reset buffer' },
|
||||||
|
{ '<leader>hp', desc = 'Preview hunk' },
|
||||||
|
{ '<leader>hb', desc = 'Blame line' },
|
||||||
|
{ '<leader>hd', desc = 'Diff against index' },
|
||||||
|
{ '<leader>hD', desc = 'Diff against last commit' },
|
||||||
|
|
||||||
|
-- Git toggles
|
||||||
|
{ '<leader>tb', desc = 'Toggle git show blame line' },
|
||||||
|
{ '<leader>tD', desc = 'Toggle git show deleted' },
|
||||||
|
|
||||||
|
-- Function keys
|
||||||
|
{ '<F1>', desc = 'Debug: Step Into' },
|
||||||
|
{ '<F2>', desc = 'Debug: Step Over' },
|
||||||
|
{ '<F3>', desc = 'Debug: Step Out' },
|
||||||
|
{ '<F5>', desc = 'Debug: Start/Continue' },
|
||||||
|
{ '<F7>', desc = 'Debug: See last session result' },
|
||||||
|
|
||||||
|
-- Other important keybinds
|
||||||
|
{ '\\', desc = 'NeoTree reveal' },
|
||||||
|
{ 'gd', desc = 'Go to Definition' },
|
||||||
|
{ 'gr', desc = 'Go to References' },
|
||||||
|
{ 'gI', desc = 'Go to Implementation' },
|
||||||
|
{ 'gD', desc = 'Go to Declaration' },
|
||||||
|
{ ']c', desc = 'Next git change' },
|
||||||
|
{ '[c', desc = 'Previous git change' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
'echasnovski/mini.nvim',
|
||||||
|
config = function()
|
||||||
|
require('mini.ai').setup { n_lines = 500 }
|
||||||
|
require('mini.surround').setup()
|
||||||
|
|
||||||
|
local statusline = require 'mini.statusline'
|
||||||
|
statusline.setup { use_icons = vim.g.have_nerd_font }
|
||||||
|
|
||||||
|
statusline.section_location = function()
|
||||||
|
return '%2l:%-2v'
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
'lukas-reineke/indent-blankline.nvim',
|
||||||
|
main = 'ibl',
|
||||||
|
event = 'BufReadPost',
|
||||||
|
config = function()
|
||||||
|
vim.api.nvim_set_hl(0, 'IblIndent', { fg = '#0a0a0a' })
|
||||||
|
vim.api.nvim_set_hl(0, 'IblScope', { fg = '#0e0e0e' })
|
||||||
|
require('ibl').setup({
|
||||||
|
indent = {
|
||||||
|
char = '│',
|
||||||
|
highlight = 'IblIndent',
|
||||||
|
},
|
||||||
|
scope = {
|
||||||
|
enabled = true,
|
||||||
|
show_start = false,
|
||||||
|
show_end = false,
|
||||||
|
highlight = 'IblScope',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
297
snippets/cs.lua
297
snippets/cs.lua
|
@ -1,178 +1,157 @@
|
||||||
local ls = require 'luasnip'
|
local ls = require("luasnip")
|
||||||
local s = ls.snippet
|
local s = ls.snippet
|
||||||
local t = ls.text_node
|
local t = ls.text_node
|
||||||
local i = ls.insert_node
|
local i = ls.insert_node
|
||||||
local f = ls.function_node
|
local fmt = require("luasnip.extras.fmt").fmt
|
||||||
local c = ls.choice_node
|
|
||||||
local d = ls.dynamic_node
|
-- Configure snippet options
|
||||||
local r = ls.restore_node
|
local snippet_opts = {
|
||||||
local fmt = require('luasnip.extras.fmt').fmt
|
condition = function()
|
||||||
|
return not ls.in_snippet()
|
||||||
|
end,
|
||||||
|
show_condition = function()
|
||||||
|
return not ls.in_snippet()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
-- Complete main setup
|
||||||
|
s("main", fmt([[
|
||||||
|
using System;
|
||||||
|
|
||||||
s(
|
namespace {};
|
||||||
'cww',
|
|
||||||
fmt('Console.WriteLine({});{}', {
|
|
||||||
i(1, ''),
|
|
||||||
i(0),
|
|
||||||
})
|
|
||||||
),
|
|
||||||
|
|
||||||
s(
|
class Program
|
||||||
'cw',
|
{{
|
||||||
fmt('Console.Write({});{}', {
|
static void Main(string[] args)
|
||||||
i(1, ''),
|
{{
|
||||||
i(0),
|
{}
|
||||||
})
|
}}
|
||||||
),
|
}}
|
||||||
|
]], { i(1, "MyApp"), i(2, 'Console.WriteLine("Hello, World!");') }), snippet_opts),
|
||||||
|
|
||||||
s(
|
-- Namespace
|
||||||
'do',
|
s("namespace", fmt([[
|
||||||
fmt(
|
namespace {};
|
||||||
[[
|
|
||||||
do
|
|
||||||
{{
|
|
||||||
{}}} while ({});
|
|
||||||
{}]],
|
|
||||||
{
|
|
||||||
i(2),
|
|
||||||
i(1),
|
|
||||||
i(0),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s(
|
{}
|
||||||
'while',
|
]], { i(1, "MyNamespace"), i(2) }), snippet_opts),
|
||||||
fmt(
|
|
||||||
[[
|
|
||||||
while ({})
|
|
||||||
{{
|
|
||||||
{}}}
|
|
||||||
{}]],
|
|
||||||
{
|
|
||||||
i(1),
|
|
||||||
i(2),
|
|
||||||
i(0),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s(
|
-- Class
|
||||||
'fo',
|
s("class", fmt([[
|
||||||
fmt(
|
public class {}
|
||||||
[[
|
{{
|
||||||
for (int {} = 0; {} < {}; {}++)
|
{}
|
||||||
{{
|
}}
|
||||||
{}}}
|
]], { i(1, "MyClass"), i(2) }), snippet_opts),
|
||||||
{}]],
|
|
||||||
{
|
|
||||||
i(2, 'i'),
|
|
||||||
f(function(args)
|
|
||||||
return args[1][1]
|
|
||||||
end, { 2 }),
|
|
||||||
i(1, '1'),
|
|
||||||
f(function(args)
|
|
||||||
return args[1][1]
|
|
||||||
end, { 2 }),
|
|
||||||
i(3),
|
|
||||||
i(0),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s(
|
-- Method
|
||||||
'forr',
|
s("method", fmt([[
|
||||||
fmt(
|
public {} {}({})
|
||||||
[[
|
{{
|
||||||
for (int {} = {} - 1; {} >= 0; {}--)
|
{}
|
||||||
{{
|
}}
|
||||||
{}}}
|
]], { i(1, "void"), i(2, "MyMethod"), i(3), i(4) }), snippet_opts),
|
||||||
{}]],
|
|
||||||
{
|
|
||||||
i(2, 'i'),
|
|
||||||
i(1, 'length'),
|
|
||||||
f(function(args)
|
|
||||||
return args[1][1]
|
|
||||||
end, { 2 }),
|
|
||||||
f(function(args)
|
|
||||||
return args[1][1]
|
|
||||||
end, { 2 }),
|
|
||||||
i(3),
|
|
||||||
i(0),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s('cc', t 'Console.Clear();'),
|
-- Property
|
||||||
|
s("prop", fmt([[
|
||||||
|
public {} {} {{ get; set; }}
|
||||||
|
]], { i(1, "string"), i(2, "MyProperty") }), snippet_opts),
|
||||||
|
|
||||||
s('crk', t 'Console.ReadKey(true);'),
|
-- Auto property with init
|
||||||
|
s("propi", fmt([[
|
||||||
|
public {} {} {{ get; init; }}
|
||||||
|
]], { i(1, "string"), i(2, "MyProperty") }), snippet_opts),
|
||||||
|
|
||||||
s('crl', t 'Console.ReadLine();'),
|
-- Constructor
|
||||||
|
s("ctor", fmt([[
|
||||||
|
public {}({})
|
||||||
|
{{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "ClassName"), i(2), i(3) }), snippet_opts),
|
||||||
|
|
||||||
s(
|
-- Interface
|
||||||
'foreach',
|
s("interface", fmt([[
|
||||||
fmt(
|
public interface {}
|
||||||
[[
|
{{
|
||||||
foreach ({})
|
{}
|
||||||
{{
|
}}
|
||||||
{}}}{}]],
|
]], { i(1, "IMyInterface"), i(2) }), snippet_opts),
|
||||||
{
|
|
||||||
i(1),
|
|
||||||
i(2),
|
|
||||||
i(0),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s(
|
-- For loop
|
||||||
'cla',
|
s("for", fmt([[
|
||||||
fmt(
|
for (int {} = 0; {} < {}; {}++)
|
||||||
[[
|
{{
|
||||||
class {}
|
{}
|
||||||
{{
|
}}
|
||||||
{}}}
|
]], { i(1, "i"), i(1), i(2, "10"), i(1), i(3) }), snippet_opts),
|
||||||
]],
|
|
||||||
{
|
|
||||||
i(1, 'ClassName'),
|
|
||||||
i(0),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s(
|
-- Foreach loop
|
||||||
'inter',
|
s("foreach", fmt([[
|
||||||
fmt(
|
foreach ({} {} in {})
|
||||||
[[
|
{{
|
||||||
interface {}
|
{}
|
||||||
{{
|
}}
|
||||||
{}}}
|
]], { i(1, "var"), i(2, "item"), i(3, "collection"), i(4) }), snippet_opts),
|
||||||
]],
|
|
||||||
{
|
|
||||||
i(1, 'IInterfaceName'),
|
|
||||||
i(0),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s(
|
-- If statement
|
||||||
'enu',
|
s("if", fmt([[
|
||||||
fmt(
|
if ({})
|
||||||
[[
|
{{
|
||||||
enum {}
|
{}
|
||||||
{{
|
}}
|
||||||
{}}}
|
]], { i(1, "condition"), i(2) }), snippet_opts),
|
||||||
]],
|
|
||||||
{
|
|
||||||
i(1, 'EnumName'),
|
|
||||||
i(0),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s('comment', {
|
-- Console.WriteLine
|
||||||
t { '/*', '' },
|
s("cw", fmt([[
|
||||||
i(1),
|
Console.WriteLine({});
|
||||||
t { '', '*/' },
|
]], { i(1, '"Hello"') }), snippet_opts),
|
||||||
}),
|
|
||||||
}
|
-- Console.Write
|
||||||
|
s("cwn", fmt([[
|
||||||
|
Console.Write({});
|
||||||
|
]], { i(1, '"Hello"') }), snippet_opts),
|
||||||
|
|
||||||
|
-- Try-catch
|
||||||
|
s("try", fmt([[
|
||||||
|
try
|
||||||
|
{{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
catch ({})
|
||||||
|
{{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1), i(2, "Exception ex"), i(3, "throw;") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Variable declaration
|
||||||
|
s("var", fmt([[
|
||||||
|
var {} = {};
|
||||||
|
]], { i(1, "name"), i(2, "value") }), snippet_opts),
|
||||||
|
|
||||||
|
-- String variable
|
||||||
|
s("string", fmt([[
|
||||||
|
string {} = {};
|
||||||
|
]], { i(1, "name"), i(2, '""') }), snippet_opts),
|
||||||
|
|
||||||
|
-- Record
|
||||||
|
s("record", fmt([[
|
||||||
|
public record {}({});
|
||||||
|
]], { i(1, "MyRecord"), i(2, "string Name") }), snippet_opts),
|
||||||
|
|
||||||
|
-- List declaration
|
||||||
|
s("list", fmt([[
|
||||||
|
List<{}> {} = [{}];
|
||||||
|
]], { i(1, "string"), i(2, "list"), i(3) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Dictionary declaration
|
||||||
|
s("dict", fmt([[
|
||||||
|
Dictionary<{}, {}> {} = [];
|
||||||
|
]], { i(1, "string"), i(2, "string"), i(3, "dict") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Array declaration
|
||||||
|
s("array", fmt([[
|
||||||
|
{}[] {} = [{}];
|
||||||
|
]], { i(1, "string"), i(2, "array"), i(3) }), snippet_opts),
|
||||||
|
}
|
|
@ -0,0 +1,126 @@
|
||||||
|
local ls = require("luasnip")
|
||||||
|
local s = ls.snippet
|
||||||
|
local t = ls.text_node
|
||||||
|
local i = ls.insert_node
|
||||||
|
local fmt = require("luasnip.extras.fmt").fmt
|
||||||
|
|
||||||
|
-- Configure snippet options
|
||||||
|
local snippet_opts = {
|
||||||
|
condition = function()
|
||||||
|
return not ls.in_snippet()
|
||||||
|
end,
|
||||||
|
show_condition = function()
|
||||||
|
return not ls.in_snippet()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
-- Complete main setup
|
||||||
|
s("main", fmt([[
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func main() {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, 'fmt.Println("Hello, World!")') }), snippet_opts),
|
||||||
|
|
||||||
|
-- Package declaration
|
||||||
|
s("pkg", fmt([[
|
||||||
|
package {}
|
||||||
|
]], { i(1, "main") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Function
|
||||||
|
s("func", fmt([[
|
||||||
|
func {}({}) {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "name"), i(2), i(3) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Function with return
|
||||||
|
s("funcr", fmt([[
|
||||||
|
func {}() {} {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "name"), i(2, "string"), i(3, 'return ""') }), snippet_opts),
|
||||||
|
|
||||||
|
-- If error
|
||||||
|
s("iferr", fmt([[
|
||||||
|
if err != nil {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "return err") }), snippet_opts),
|
||||||
|
|
||||||
|
-- For loop
|
||||||
|
s("for", fmt([[
|
||||||
|
for {} {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "i := 0; i < 10; i++"), i(2) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Printf
|
||||||
|
s("pf", fmt([[
|
||||||
|
fmt.Printf("{}\n", {})
|
||||||
|
]], { i(1, "%v"), i(2, "value") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Println
|
||||||
|
s("pl", fmt([[
|
||||||
|
fmt.Println({})
|
||||||
|
]], { i(1, '"Hello"') }), snippet_opts),
|
||||||
|
|
||||||
|
-- Variable declaration
|
||||||
|
s("var", fmt([[
|
||||||
|
var {} {}
|
||||||
|
]], { i(1, "name"), i(2, "string") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Short variable declaration
|
||||||
|
s(":=", fmt([[
|
||||||
|
{} := {}
|
||||||
|
]], { i(1, "name"), i(2, "value") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Struct
|
||||||
|
s("struct", fmt([[
|
||||||
|
type {} struct {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "Name"), i(2, "Field string") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Interface
|
||||||
|
s("interface", fmt([[
|
||||||
|
type {} interface {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "Name"), i(2, "Method()") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Test function
|
||||||
|
s("test", fmt([[
|
||||||
|
func Test{}(t *testing.T) {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "Name"), i(2) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Method
|
||||||
|
s("method", fmt([[
|
||||||
|
func ({} *{}) {}() {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "r"), i(2, "Receiver"), i(3, "Method"), i(4) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Goroutine
|
||||||
|
s("go", fmt([[
|
||||||
|
go func() {{
|
||||||
|
{}
|
||||||
|
}}()
|
||||||
|
]], { i(1) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Channel
|
||||||
|
s("chan", fmt([[
|
||||||
|
{} := make(chan {})
|
||||||
|
]], { i(1, "ch"), i(2, "string") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Defer
|
||||||
|
s("defer", fmt([[
|
||||||
|
defer {}
|
||||||
|
]], { i(1, "cleanup()") }), snippet_opts),
|
||||||
|
}
|
|
@ -0,0 +1,180 @@
|
||||||
|
local ls = require("luasnip")
|
||||||
|
local s = ls.snippet
|
||||||
|
local t = ls.text_node
|
||||||
|
local i = ls.insert_node
|
||||||
|
local fmt = require("luasnip.extras.fmt").fmt
|
||||||
|
|
||||||
|
-- Configure snippet options
|
||||||
|
local snippet_opts = {
|
||||||
|
condition = function()
|
||||||
|
return not ls.in_snippet()
|
||||||
|
end,
|
||||||
|
show_condition = function()
|
||||||
|
return not ls.in_snippet()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
-- Complete main setup
|
||||||
|
s("main", fmt([[
|
||||||
|
fn main() {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, 'println!("Hello, World!");') }), snippet_opts),
|
||||||
|
|
||||||
|
-- Function
|
||||||
|
s("fn", fmt([[
|
||||||
|
fn {}({}) {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "name"), i(2), i(3) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Function with return
|
||||||
|
s("fnr", fmt([[
|
||||||
|
fn {}({}) -> {} {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "name"), i(2), i(3, "()"), i(4) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Struct
|
||||||
|
s("struct", fmt([[
|
||||||
|
struct {} {{
|
||||||
|
{}: {},
|
||||||
|
}}
|
||||||
|
]], { i(1, "Name"), i(2, "field"), i(3, "String") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Enum
|
||||||
|
s("enum", fmt([[
|
||||||
|
enum {} {{
|
||||||
|
{},
|
||||||
|
}}
|
||||||
|
]], { i(1, "Name"), i(2, "Variant") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Implementation
|
||||||
|
s("impl", fmt([[
|
||||||
|
impl {} {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "Name"), i(2) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Trait
|
||||||
|
s("trait", fmt([[
|
||||||
|
trait {} {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "Name"), i(2) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Match statement
|
||||||
|
s("match", fmt([[
|
||||||
|
match {} {{
|
||||||
|
{} => {},
|
||||||
|
_ => {},
|
||||||
|
}}
|
||||||
|
]], { i(1, "value"), i(2, "pattern"), i(3), i(4) }), snippet_opts),
|
||||||
|
|
||||||
|
-- If let
|
||||||
|
s("iflet", fmt([[
|
||||||
|
if let {} = {} {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "Some(value)"), i(2, "option"), i(3) }), snippet_opts),
|
||||||
|
|
||||||
|
-- For loop
|
||||||
|
s("for", fmt([[
|
||||||
|
for {} in {} {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "item"), i(2, "iterator"), i(3) }), snippet_opts),
|
||||||
|
|
||||||
|
-- While loop
|
||||||
|
s("while", fmt([[
|
||||||
|
while {} {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "condition"), i(2) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Loop
|
||||||
|
s("loop", fmt([[
|
||||||
|
loop {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1) }), snippet_opts),
|
||||||
|
|
||||||
|
-- If statement
|
||||||
|
s("if", fmt([[
|
||||||
|
if {} {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "condition"), i(2) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Variable declaration
|
||||||
|
s("let", fmt([[
|
||||||
|
let {} = {};
|
||||||
|
]], { i(1, "name"), i(2, "value") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Mutable variable
|
||||||
|
s("letm", fmt([[
|
||||||
|
let mut {} = {};
|
||||||
|
]], { i(1, "name"), i(2, "value") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Print
|
||||||
|
s("print", fmt([[
|
||||||
|
println!("{}", {});
|
||||||
|
]], { i(1, "{}"), i(2, "value") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Debug print
|
||||||
|
s("dbg", fmt([[
|
||||||
|
dbg!({});
|
||||||
|
]], { i(1, "value") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Vector
|
||||||
|
s("vec", fmt([[
|
||||||
|
let {} = vec![{}];
|
||||||
|
]], { i(1, "name"), i(2) }), snippet_opts),
|
||||||
|
|
||||||
|
-- HashMap
|
||||||
|
s("hashmap", fmt([[
|
||||||
|
let mut {} = HashMap::new();
|
||||||
|
]], { i(1, "map") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Result match
|
||||||
|
s("result", fmt([[
|
||||||
|
match {} {{
|
||||||
|
Ok({}) => {},
|
||||||
|
Err({}) => {},
|
||||||
|
}}
|
||||||
|
]], { i(1, "result"), i(2, "value"), i(3), i(4, "err"), i(5) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Option match
|
||||||
|
s("option", fmt([[
|
||||||
|
match {} {{
|
||||||
|
Some({}) => {},
|
||||||
|
None => {},
|
||||||
|
}}
|
||||||
|
]], { i(1, "option"), i(2, "value"), i(3), i(4) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Test function
|
||||||
|
s("test", fmt([[
|
||||||
|
#[test]
|
||||||
|
fn test_{}() {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "name"), i(2) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Derive
|
||||||
|
s("derive", fmt([[
|
||||||
|
#[derive({})]
|
||||||
|
]], { i(1, "Debug, Clone") }), snippet_opts),
|
||||||
|
|
||||||
|
-- Module
|
||||||
|
s("mod", fmt([[
|
||||||
|
mod {} {{
|
||||||
|
{}
|
||||||
|
}}
|
||||||
|
]], { i(1, "name"), i(2) }), snippet_opts),
|
||||||
|
|
||||||
|
-- Use statement
|
||||||
|
s("use", fmt([[
|
||||||
|
use {};
|
||||||
|
]], { i(1, "std::collections::HashMap") }), snippet_opts),
|
||||||
|
}
|
Loading…
Reference in New Issue