feat: new config
This commit is contained in:
@@ -1,76 +0,0 @@
|
||||
local utils = require('utils')
|
||||
|
||||
local auto_formatters = { }
|
||||
|
||||
local python_autoformat = {'BufWritePre', '*.py', 'lua vim.lsp.buf.format({async=false})'}
|
||||
if O.python.autoformat then table.insert(auto_formatters, python_autoformat) end
|
||||
|
||||
local javascript_autoformat = {'BufWritePre', '*.js', 'lua vim.lsp.buf.format({async=false})'}
|
||||
local javascriptreact_autoformat = {'BufWritePre', '*.jsx', 'lua vim.lsp.buf.format({async=false})'}
|
||||
local typescript_autoformat = {'BufWritePre', '*.ts', 'lua vim.lsp.buf.format({async=false})'}
|
||||
local typescriptreact_autoformat = {'BufWritePre', '*.tsx', 'lua vim.lsp.buf.format({async=false})'}
|
||||
if O.tsserver.autoformat then
|
||||
table.insert(auto_formatters, javascript_autoformat)
|
||||
table.insert(auto_formatters, javascriptreact_autoformat)
|
||||
table.insert(auto_formatters, typescript_autoformat)
|
||||
table.insert(auto_formatters, typescriptreact_autoformat)
|
||||
end
|
||||
|
||||
local lua_format = {'BufWritePre', '*.lua', 'lua vim.lsp.buf.format({async=false})'}
|
||||
if O.lua.autoformat then table.insert(auto_formatters, lua_format) end
|
||||
|
||||
local json_format = {'BufWritePre', '*.json', 'lua vim.lsp.buf.format({async=false})'}
|
||||
if O.json.autoformat then table.insert(auto_formatters, json_format) end
|
||||
|
||||
local ruby_format = {'BufWritePre', '*.rb', 'lua vim.lsp.buf.format({async=false})'}
|
||||
if O.ruby.autoformat then table.insert(auto_formatters, ruby_format) end
|
||||
|
||||
local go_format = {'BufWritePre', '*.go', 'lua vim.lsp.buf.format({async=false})'}
|
||||
if O.go.autoformat then table.insert(auto_formatters, go_format) end
|
||||
|
||||
utils.define_augroups({
|
||||
_general_settings = {
|
||||
{'TextYankPost', '*', 'lua require(\'vim.highlight\').on_yank({higroup = \'Search\', timeout = 200})'},
|
||||
{'BufWinEnter', '*', 'setlocal formatoptions-=c formatoptions-=r formatoptions-=o'},
|
||||
{'BufRead', '*', 'setlocal formatoptions-=c formatoptions-=r formatoptions-=o'},
|
||||
{'BufNewFile', '*', 'setlocal formatoptions-=c formatoptions-=r formatoptions-=o'},
|
||||
{'VimLeavePre', '*', 'set title set titleold='},
|
||||
{'FileType', 'qf', 'set nobuflisted'},
|
||||
|
||||
-- {'User', 'GoyoLeave', 'lua require(\'galaxyline\').disable_galaxyline()'},
|
||||
-- {'User', 'GoyoEnter', 'lua require(\'galaxyline\').galaxyline_augroup()'},
|
||||
},
|
||||
_java = {
|
||||
{'FileType', 'java', 'luafile '..CONFIG_PATH..'/lua/lsp/java-ls.lua'},
|
||||
{'FileType', 'java', 'nnoremap ca <Cmd>lua require(\'jdtls\').code_action()<CR>'}
|
||||
},
|
||||
_go = {
|
||||
-- Go generally requires Tabs instead of spaces.
|
||||
{'FileType', 'go', 'setlocal tabstop=4'},
|
||||
{'FileType', 'go', 'setlocal shiftwidth=4'},
|
||||
{'FileType', 'go', 'setlocal softtabstop=4'},
|
||||
{'FileType', 'go', 'setlocal noexpandtab'},
|
||||
},
|
||||
_dashboard = {
|
||||
-- seems to be nobuflisted that makes my stuff disapear will do more testing
|
||||
{
|
||||
'FileType', 'dashboard',
|
||||
'setlocal nocursorline noswapfile synmaxcol& signcolumn=no norelativenumber nocursorcolumn nospell nolist nonumber bufhidden=wipe colorcolumn= foldcolumn=0 matchpairs= '
|
||||
}, {'FileType', 'dashboard', 'set showtabline=0 | autocmd BufLeave <buffer> set showtabline=2'}
|
||||
},
|
||||
_markdown = {{'FileType', 'markdown', 'setlocal wrap'}, {'FileType', 'markdown', 'setlocal spell'}},
|
||||
_solidity = {
|
||||
{'BufWinEnter', '.sol', 'setlocal filetype=solidity'}, {'BufRead', '*.sol', 'setlocal filetype=solidity'},
|
||||
{'BufNewFile', '*.sol', 'setlocal filetype=solidity'}
|
||||
},
|
||||
_gemini = {
|
||||
{'BufWinEnter', '.gmi', 'setlocal filetype=markdown'}, {'BufRead', '*.gmi', 'setlocal filetype=markdown'},
|
||||
{'BufNewFile', '*.gmi', 'setlocal filetype=markdown'}
|
||||
},
|
||||
_buffer_bindings = {
|
||||
{'FileType', 'dashboard', 'nnoremap <silent> <buffer> q :q<CR>'},
|
||||
{'FileType', 'lspinfo', 'nnoremap <silent> <buffer> q :q<CR>'},
|
||||
{'FileType', 'floaterm', 'nnoremap <silent> <buffer> q :q<CR>'},
|
||||
},
|
||||
_auto_formatters = auto_formatters
|
||||
})
|
||||
@@ -0,0 +1,14 @@
|
||||
-- Turn off paste mode when leaving insert
|
||||
vim.api.nvim_create_autocmd("InsertLeave", {
|
||||
pattern = "*",
|
||||
command = "set nopaste",
|
||||
})
|
||||
|
||||
-- Disable the concealing in some file formats
|
||||
-- The default conceallevel is 3 in LazyVim
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "json", "jsonc", "markdown" },
|
||||
callback = function()
|
||||
vim.opt.conceallevel = 0
|
||||
end,
|
||||
})
|
||||
@@ -0,0 +1,256 @@
|
||||
|
||||
local opts = {
|
||||
mode = "n", -- NORMAL mode
|
||||
prefix = "<leader>",
|
||||
buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings
|
||||
silent = true, -- use `silent` when creating keymaps
|
||||
noremap = true, -- use `noremap` when creating keymaps
|
||||
nowait = false -- use `nowait` when creating keymaps
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
local mappings = {
|
||||
-- ["/"] = "Comment",
|
||||
-- ["c"] = "Close Buffer",
|
||||
["e"] = "Explorer",
|
||||
-- ["f"] = "Find File",
|
||||
["h"] = "No Highlight",
|
||||
a = {
|
||||
name = "+Action",
|
||||
a = { "<cmd>@:<cr>", "execute last command again" }
|
||||
},
|
||||
b = {
|
||||
name = "+Buffer",
|
||||
n = { "<cmd>BufferNext<cr>", "next buffer" },
|
||||
p = { "<cmd>BufferPrevious<cr>", "previous buffer" },
|
||||
q = { "<cmd>q<cr>", "quit" },
|
||||
s = { "<cmd>w<cr>", "save" },
|
||||
r = { "<cmd>e!<cr>", "reload" },
|
||||
d = { "<cmd>BufferClose<cr>", "close buffer" },
|
||||
z = { "<cmd>CommentToggle<CR>", "toggle comment" },
|
||||
},
|
||||
D = {
|
||||
name = "+Diagnostics",
|
||||
t = { "<cmd>TroubleToggle<cr>", "trouble" },
|
||||
w = { "<cmd>TroubleToggle lsp_workspace_diagnostics<cr>", "workspace" },
|
||||
d = { "<cmd>TroubleToggle lsp_document_diagnostics<cr>", "document" },
|
||||
q = { "<cmd>TroubleToggle quickfix<cr>", "quickfix" },
|
||||
l = { "<cmd>TroubleToggle loclist<cr>", "loclist" },
|
||||
r = { "<cmd>TroubleToggle lsp_references<cr>", "references" },
|
||||
},
|
||||
d = {
|
||||
name = "+Debug",
|
||||
-- b = {"<cmd>DebugToggleBreakpoint<cr>", "Toggle Breakpoint"},
|
||||
-- c = {"<cmd>DebugContinue<cr>", "Continue"},
|
||||
-- i = {"<cmd>DebugStepInto<cr>", "Step Into"},
|
||||
-- o = {"<cmd>DebugStepOver<cr>", "Step Over"},
|
||||
-- r = {"<cmd>DebugToggleRepl<cr>", "Toggle Repl"},
|
||||
-- s = {"<cmd>DebugStart<cr>", "Start"}
|
||||
d = { "<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<cr>", "show diagnostics" },
|
||||
|
||||
c = { "<cmd>lua require'dap'.continue()<cr>", "continue" },
|
||||
b = { ':lua require"dap".toggle_breakpoint()<CR>', "Toggle Breadpoint" },
|
||||
j = { ':lua require"dap".step_over()<CR>', "step over" },
|
||||
k = { ':lua require"dap".step_out()<CR>', "step out" },
|
||||
l = { ':lua require"dap".step_into()<CR>', "step into" },
|
||||
--<c-h>', ':lua require"dap".continue()<CR>')
|
||||
u = { ':lua require"dap".up()<CR>', "up" },
|
||||
-- d = {':lua require"dap".down()<CR>', "down"},
|
||||
_ = { ':lua require"dap".disconnect();require"dap".stop();require"dap".run_last()<CR>', "disconnect" },
|
||||
--r = {':lua require"dap".repl.open({}, "vsplit")<CR><C-w>l', "repl open"},
|
||||
i = { ':lua require"dap.ui.variables".visual_hover()<CR>', "visual_hover" },
|
||||
--? = {':lua require"dap.ui.variables".scopes()<CR>',"scopes"},
|
||||
-- e = {':lua require"dap".set_exception_breakpoints({"all"})<CR>',"esception bp"},
|
||||
-- a = {':lua require"debugHelper".attach()<CR>',"attach"},
|
||||
-- A = {':lua require"debugHelper".attachToRemote()<CR>',"attach to remote"},
|
||||
s = { ':lua local widgets=require"dap.ui.widgets";widgets.centered_float(widgets.scopes)<CR>', "centered_float" },
|
||||
},
|
||||
f = {
|
||||
name = "+File",
|
||||
m = { "<cmd>lua require'utils'.open_md()<cr>", "open a markdown file in vscode" },
|
||||
s = { "<cmd>w<cr>", "save file" },
|
||||
t = { "<cmd>NvimTreeToggle<cr>", "toggle nvim tree" },
|
||||
r = { "<cmd>RnvimrToggle<cr>", "toggle rnvimr" },
|
||||
y = { "<cmd>lua require'utils'.yank_filepath()<cr>", "copy the file path" },
|
||||
d = { "<cmd>lua require'utils'.yank_file_dir()<cr>", "copy the file path" },
|
||||
l = { "<cmd>NvimTreeFindFile<CR>", "find file" },
|
||||
-- T = {"<cmd>let @+ = 'go test -v -run='+expand('<cword>')<cr>", "get current word in go test"},
|
||||
},
|
||||
g = {
|
||||
name = "+Git",
|
||||
m = {"<cmd>Gvdiff master:%<cr>", "Diff with master"},
|
||||
j = { "<cmd>lua require 'gitsigns'.next_hunk()<cr>", "Next Hunk" },
|
||||
k = { "<cmd>lua require 'gitsigns'.prev_hunk()<cr>", "Prev Hunk" },
|
||||
l = { "<cmd>lua require 'gitsigns'.blame_line()<cr>", "Blame" },
|
||||
p = { "<cmd>lua require 'gitsigns'.preview_hunk()<cr>", "Preview Hunk" },
|
||||
r = { "<cmd>lua require 'gitsigns'.reset_hunk()<cr>", "Reset Hunk" },
|
||||
R = { "<cmd>lua require 'gitsigns'.reset_buffer()<cr>", "Reset Buffer" },
|
||||
s = { "<cmd>lua require 'gitsigns'.stage_hunk()<cr>", "Stage Hunk" },
|
||||
S = { "<cmd>lua require 'gitsigns'.stage_buffer()<cr>", "Stage Buffer" },
|
||||
u = {
|
||||
"<cmd>lua require 'gitsigns'.undo_stage_hunk()<cr>",
|
||||
"Undo Stage Hunk",
|
||||
},
|
||||
o = { "<cmd>Telescope git_status<cr>", "Open changed file" },
|
||||
b = { "<cmd>Telescope git_branches<cr>", "Checkout branch" },
|
||||
c = { "<cmd>Telescope git_commits<cr>", "Checkout commit" },
|
||||
C = {
|
||||
"<cmd>Telescope git_bcommits<cr>",
|
||||
"Checkout commit(for current file)",
|
||||
},
|
||||
d = {
|
||||
"<cmd>Gitsigns diffthis HEAD<cr>",
|
||||
"Git Diff",
|
||||
},
|
||||
},
|
||||
l = {
|
||||
name = "+Language",
|
||||
a = { "<cmd>Lspsaga code_action<cr>", "Code Action" },
|
||||
A = { "<cmd>Lspsaga range_code_action<cr>", "Selected Action" },
|
||||
d = { "<cmd>Telescope lsp_document_diagnostics<cr>", "Document Diagnostics" },
|
||||
D = { "<cmd>Telescope lsp_workspace_diagnostics<cr>", "Workspace Diagnostics" },
|
||||
f = { "<cmd>LspFormatting<cr>", "Format" },
|
||||
F = { "<cmd>Lspsaga lsp_finder<cr>", "LSP Finder" },
|
||||
-- i = {"<cmd>Telescope lsp_implementations<cr>", "implement"},
|
||||
i = { "<cmd>lua vim.lsp.buf.implementation()<cr>", "implement" },
|
||||
l = { "<cmd>lua vim.lsp.buf.hover()<cr>", "hover" },
|
||||
L = { "<cmd>Lspsaga show_line_diagnostics<cr>", "Line Diagnostics" },
|
||||
k = { "<cmd>: LspRestart<cr>", "restart lsp server" },
|
||||
n = { "<cmd>lua vim.lsp.diagnostic.goto_next()<cr>", "next diagnostic" },
|
||||
o = { "<cmd>: SymbolsOutline<cr>", "symbols outline" },
|
||||
p = { "<cmd>lua vim.lsp.diagnostic.goto_prev()<cr>", "prev diagnostic" },
|
||||
P = { "<cmd>Lspsaga preview_definition<cr>", "Preview Definition" },
|
||||
q = { "<cmd>Telescope quickfix<cr>", "Quickfix" },
|
||||
r = { "<cmd>lua vim.lsp.buf.references()<cr>", "references" },
|
||||
R = { "<cmd>Lspsaga rename<cr>", "Rename" },
|
||||
t = { "<cmd>LspTypeDefinition<cr>", "Type Definition" },
|
||||
x = { "<cmd>cclose<cr>", "Close Quickfix" },
|
||||
s = { "<cmd>Telescope lsp_document_symbols<cr>", "Document Symbols" },
|
||||
S = { "<cmd>Telescope lsp_dynamic_workspace_symbols<cr>", "Workspace Symbols" },
|
||||
z = { "<cmd>LspInfo<cr>", "Info" },
|
||||
[","] = { "<cmd>LspInstallInfo<cr>", "LSP servers" }
|
||||
},
|
||||
p = {
|
||||
name = "Packer",
|
||||
c = { "<cmd>PackerCompile<cr>", "Compile" },
|
||||
i = { "<cmd>PackerInstall<cr>", "Install" },
|
||||
s = { "<cmd>PackerSync<cr>", "Sync" },
|
||||
S = { "<cmd>PackerStatus<cr>", "Status" },
|
||||
u = { "<cmd>PackerUpdate<cr>", "Update" },
|
||||
},
|
||||
q = {
|
||||
name = "quit",
|
||||
q = { "<cmd>qall<cr>", "quit" },
|
||||
},
|
||||
s = {
|
||||
name = "+Search",
|
||||
b = { "<cmd>Telescope git_branches<cr>", "Checkout branch" },
|
||||
-- c = {"<cmd>Telescope colorscheme<cr>", "Colorscheme"},
|
||||
c = { "<cmd>:nohl<cr>", "no highlight" },
|
||||
d = { "<cmd>Telescope lsp_document_diagnostics<cr>", "Document Diagnostics" },
|
||||
D = { "<cmd>Telescope lsp_workspace_diagnostics<cr>", "Workspace Diagnostics" },
|
||||
f = { "<cmd>Fzflua files<cr>", "Find File" },
|
||||
m = { "<cmd>Telescope marks<cr>", "Marks" },
|
||||
M = { "<cmd>Telescope man_pages<cr>", "Man Pages" },
|
||||
r = { "<cmd>FzfLua oldfiles<cr>", "Open Recent File" },
|
||||
R = { "<cmd>Telescope registers<cr>", "Registers" },
|
||||
t = { "<cmd>FzfLua live_grep<cr>", "Text" },
|
||||
["#"] = { "<cmd>FzfLua grep_cword<cr>", "Search word under cursor" },
|
||||
},
|
||||
S = {
|
||||
name = "+Session",
|
||||
s = { "<cmd>SessionSave<cr>", "Save Session" },
|
||||
l = { "<cmd>SessionLoad<cr>", "Load Session" },
|
||||
},
|
||||
t = {
|
||||
name = "+Test",
|
||||
a = { "<cmd>TestSuite -v -cover<cr>", "TestSuite" },
|
||||
t = { "<cmd>lua require('neotest').run.run() <cr>", "TestNearest" },
|
||||
f = { '<cmd>lua require("neotest").run.run(vim.fn.expand("%"))<cr>', "TestFile" },
|
||||
c = { "<cmd>GoCover<cr>", "go coverage" },
|
||||
C = { "<cmd>GoCoverClear<cr>", "go coverage clear" },
|
||||
b = { "<cmd>lua require'dap'.toggle_breakpoint()<cr>", "set break point" },
|
||||
r = { "<cmd>lua require'dap'.continue()<cr>", "continue" },
|
||||
},
|
||||
|
||||
-- extras
|
||||
z = {
|
||||
name = "+Zen",
|
||||
s = { "<cmd>TZBottom<cr>", "toggle status line" },
|
||||
t = { "<cmd>TZTop<cr>", "toggle tab bar" },
|
||||
z = { "<cmd>TZAtaraxis<cr>", "toggle zen" },
|
||||
}
|
||||
}
|
||||
|
||||
local wk = require("which-key")
|
||||
wk.register(mappings, opts)
|
||||
|
||||
|
||||
local keymap = vim.keymap
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
-- no hl
|
||||
keymap.set('n', '<Leader>h', ':set hlsearch!<CR>', { noremap = true, silent = true })
|
||||
|
||||
-- explorer
|
||||
keymap.set('n', '<Leader>e', ':NvimTreeToggle<CR>', { noremap = true, silent = true })
|
||||
|
||||
-- telescope
|
||||
-- keymap.set('n', '<C-p>', ":lua require'telescope.builtin'.find_files()<CR>", {noremap = true, silent = true})
|
||||
keymap.set('n', '<C-p>', ":FzfLua files<CR>", { noremap = true, silent = true })
|
||||
|
||||
-- dashboard
|
||||
keymap.set('n', '<Leader>;', ':Dashboard<CR>', { noremap = true, silent = true })
|
||||
|
||||
-- Comments
|
||||
keymap.set("n", "<Leader>b/", ":CommentToggle<CR>", { noremap = true, silent = true })
|
||||
keymap.set("v", "<Leader>b/", ":CommentToggle<CR>", { noremap = true, silent = true })
|
||||
|
||||
-- close buffer
|
||||
keymap.set("n", "<leader>c", ":BufferClose<CR>", { noremap = true, silent = true })
|
||||
|
||||
keymap.set('n', '-', ':RnvimrToggle<CR>', opts )
|
||||
|
||||
-- better window movement
|
||||
keymap.set('n', '<C-h>', '<C-w>h', { silent = true })
|
||||
keymap.set('n', '<C-j>', '<C-w>j', { silent = true })
|
||||
keymap.set('n', '<C-k>', '<C-w>k', { silent = true })
|
||||
keymap.set('n', '<C-l>', '<C-w>l', { silent = true })
|
||||
|
||||
-- better edit
|
||||
keymap.set('n', 'Y', 'y$', {})
|
||||
|
||||
-- resize with arrows
|
||||
keymap.set('n', '<C-Up>', ':resize -2<CR>', { silent = true })
|
||||
keymap.set('n', '<C-Down>', ':resize +2<CR>', { silent = true })
|
||||
keymap.set('n', '<C-Left>', ':vertical resize -2<CR>', { silent = true })
|
||||
keymap.set('n', '<C-Right>', ':vertical resize +2<CR>', { silent = true })
|
||||
|
||||
-- better indenting
|
||||
keymap.set('v', '<', '<gv', { noremap = true, silent = true })
|
||||
keymap.set('v', '>', '>gv', { noremap = true, silent = true })
|
||||
|
||||
-- I hate escape
|
||||
keymap.set('i', 'jk', '<ESC>', { noremap = true, silent = true })
|
||||
keymap.set('i', 'kj', '<ESC>', { noremap = true, silent = true })
|
||||
keymap.set('i', 'jj', '<ESC>', { noremap = true, silent = true })
|
||||
|
||||
-- Tab switch buffer
|
||||
keymap.set('n', '<TAB>', ':bnext<CR>', { noremap = true, silent = true })
|
||||
keymap.set('n', '<S-TAB>', ':bprevious<CR>', { noremap = true, silent = true })
|
||||
|
||||
-- Move selected line / block of text in visual mode
|
||||
keymap.set('x', 'K', ':move \'<-2<CR>gv-gv', { noremap = true, silent = true })
|
||||
keymap.set('x', 'J', ':move \'>+1<CR>gv-gv', { noremap = true, silent = true })
|
||||
|
||||
keymap.set('', '<C-q>', ':call QuickFixToggle()<CR>', { noremap = true, silent = true })
|
||||
|
||||
-- -- Better nav for omnicomplete
|
||||
-- vim.cmd('inoremap <expr> <c-j> (\"\\<C-n>\")')
|
||||
-- vim.cmd('inoremap <expr> <c-k> (\"\\<C-p>\")')
|
||||
|
||||
-- vim.cmd('vnoremap p "0p')
|
||||
-- vim.cmd('vnoremap P "0P')
|
||||
@@ -0,0 +1,46 @@
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not vim.loop.fs_stat(lazypath) then
|
||||
-- bootstrap lazy.nvim
|
||||
-- stylua: ignore
|
||||
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
|
||||
end
|
||||
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
|
||||
|
||||
require("lazy").setup({
|
||||
spec = {
|
||||
-- add LazyVim and import its plugins
|
||||
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
|
||||
-- import any extras modules here
|
||||
-- { import = "lazyvim.plugins.extras.lang.typescript" },
|
||||
-- { import = "lazyvim.plugins.extras.lang.json" },
|
||||
-- { import = "lazyvim.plugins.extras.ui.mini-animate" },
|
||||
-- import/override with your plugins
|
||||
{ import = "plugins" },
|
||||
},
|
||||
defaults = {
|
||||
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
|
||||
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
|
||||
lazy = false,
|
||||
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
|
||||
-- have outdated releases, which may break your Neovim install.
|
||||
version = false, -- always use the latest git commit
|
||||
-- version = "*", -- try installing the latest stable version for plugins that support semver
|
||||
},
|
||||
install = { colorscheme = { "tokyonight", "habamax" } },
|
||||
checker = { enabled = true }, -- automatically check for plugin updates
|
||||
performance = {
|
||||
rtp = {
|
||||
-- disable some rtp plugins
|
||||
disabled_plugins = {
|
||||
"gzip",
|
||||
-- "matchit",
|
||||
-- "matchparen",
|
||||
-- "netrwPlugin",
|
||||
"tarPlugin",
|
||||
"tohtml",
|
||||
"tutor",
|
||||
"zipPlugin",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,56 @@
|
||||
vim.cmd('set iskeyword+=-') -- treat dash separated words as a word text object"
|
||||
vim.cmd('set shortmess+=c') -- Don't pass messages to |ins-completion-menu|.
|
||||
vim.cmd('set inccommand=split') -- Make substitution work in realtime
|
||||
vim.o.hidden = true -- Required to keep multiple buffers open multiple buffers
|
||||
vim.o.title = true
|
||||
TERMINAL = vim.fn.expand('$TERMINAL')
|
||||
vim.cmd('let &titleold="'..TERMINAL..'"')
|
||||
vim.o.titlestring="%<%F%=%l/%L - nvim"
|
||||
vim.wo.wrap = true -- Display long lines as just one line
|
||||
vim.cmd('set whichwrap+=<,>,[,],h,l') -- move to next line with theses keys
|
||||
vim.cmd('syntax on') -- syntax highlighting
|
||||
vim.o.pumheight = 10 -- Makes popup menu smaller
|
||||
vim.o.fileencoding = "utf-8" -- The encoding written to file
|
||||
vim.o.cmdheight = 2 -- More space for displaying messages
|
||||
vim.cmd('set colorcolumn=99999') -- fix indentline for now
|
||||
vim.o.mouse = "a" -- Enable your mouse
|
||||
vim.o.splitbelow = true -- Horizontal splits will automatically be below
|
||||
vim.o.termguicolors = true -- set term gui colors most terminals support this
|
||||
vim.o.splitright = true -- Vertical splits will automatically be to the right
|
||||
-- vim.o.t_Co = "256" -- Support 256 colors
|
||||
vim.o.conceallevel = 0 -- So that I can see `` in markdown files
|
||||
-- vim.cmd('set ts=4') -- Insert 2 spaces for a tab
|
||||
-- vim.cmd('set sw=4') -- Change the number of space characters inserted for indentation
|
||||
-- vim.cmd('set expandtab') -- Converts tabs to spaces
|
||||
vim.bo.smartindent = true -- Makes indenting smart
|
||||
vim.wo.number = true -- set numbered lines
|
||||
vim.wo.relativenumber = true -- set relative number
|
||||
vim.wo.cursorline = true -- Enable highlighting of the current line
|
||||
vim.o.showtabline = 2 -- Always show tabs
|
||||
vim.o.showmode = false -- We don't need to see things like -- INSERT -- anymore
|
||||
vim.o.backup = false -- This is recommended by coc
|
||||
vim.o.writebackup = false -- This is recommended by coc
|
||||
vim.wo.signcolumn = "yes" -- Always show the signcolumn, otherwise it would shift the text each time
|
||||
vim.o.updatetime = 300 -- Faster completion
|
||||
vim.o.timeoutlen = 100 -- By default timeoutlen is 1000 ms
|
||||
vim.o.clipboard = "unnamedplus" -- Copy paste between vim and everything else
|
||||
vim.cmd('filetype plugin on') -- filetype detection
|
||||
-- vim.o.guifont = "JetBrainsMono\\ Nerd\\ Font\\ Mono:h18"
|
||||
-- vim.o.guifont = "Hack\\ Nerd\\ Font\\ Mono"
|
||||
-- vim.o.guifont = "SauceCodePro Nerd Font:h17"
|
||||
vim.o.guifont = "FiraCode Nerd Font:h17"
|
||||
|
||||
-- vim.o.guifont = "JetBrains\\ Mono\\ Regular\\ Nerd\\ Font\\ Complete"
|
||||
vim.g.vim_markdown_folding_disabled = 1
|
||||
|
||||
vim.g.vimspector_enable_mappings = 'HUMAN'
|
||||
vim.g['test#go#rspec#options'] = { nearest= '--v', suite= '--v' }
|
||||
|
||||
-- git blame
|
||||
vim.cmd('highlight default link gitblame SpecialComment')
|
||||
vim.g.gitblame_enabled = 0
|
||||
|
||||
-- last position jump
|
||||
vim.cmd([[
|
||||
autocmd BufReadPost * if line("'\"") >= 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
|
||||
]])
|
||||
@@ -1,81 +0,0 @@
|
||||
vim.api.nvim_set_keymap('n', '-', ':RnvimrToggle<CR>', { noremap = true, silent = true })
|
||||
|
||||
-- better window movement
|
||||
vim.api.nvim_set_keymap('n', '<C-h>', '<C-w>h', { silent = true })
|
||||
vim.api.nvim_set_keymap('n', '<C-j>', '<C-w>j', { silent = true })
|
||||
vim.api.nvim_set_keymap('n', '<C-k>', '<C-w>k', { silent = true })
|
||||
vim.api.nvim_set_keymap('n', '<C-l>', '<C-w>l', { silent = true })
|
||||
|
||||
-- better edit
|
||||
vim.api.nvim_set_keymap('n', 'Y', 'y$', {})
|
||||
|
||||
-- TODO fix this
|
||||
-- Terminal window navigation
|
||||
-- vim.cmd([[
|
||||
-- tnoremap <C-h> <C-\><C-N><C-w>h
|
||||
-- tnoremap <C-j> <C-\><C-N><C-w>j
|
||||
-- tnoremap <C-k> <C-\><C-N><C-w>k
|
||||
-- tnoremap <C-l> <C-\><C-N><C-w>l
|
||||
-- inoremap <C-h> <C-\><C-N><C-w>h
|
||||
-- inoremap <C-j> <C-\><C-N><C-w>j
|
||||
-- inoremap <C-k> <C-\><C-N><C-w>k
|
||||
-- inoremap <C-l> <C-\><C-N><C-w>l
|
||||
-- tnoremap <Esc> <C-\><C-n>
|
||||
-- ]])
|
||||
|
||||
-- TODO fix this
|
||||
-- resize with arrows
|
||||
vim.api.nvim_set_keymap('n', '<C-Up>', ':resize -2<CR>', { silent = true })
|
||||
vim.api.nvim_set_keymap('n', '<C-Down>', ':resize +2<CR>', { silent = true })
|
||||
vim.api.nvim_set_keymap('n', '<C-Left>', ':vertical resize -2<CR>', { silent = true })
|
||||
vim.api.nvim_set_keymap('n', '<C-Right>', ':vertical resize +2<CR>', { silent = true })
|
||||
|
||||
-- better indenting
|
||||
vim.api.nvim_set_keymap('v', '<', '<gv', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap('v', '>', '>gv', { noremap = true, silent = true })
|
||||
|
||||
-- I hate escape
|
||||
vim.api.nvim_set_keymap('i', 'jk', '<ESC>', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap('i', 'kj', '<ESC>', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap('i', 'jj', '<ESC>', { noremap = true, silent = true })
|
||||
|
||||
-- Tab switch buffer
|
||||
vim.api.nvim_set_keymap('n', '<TAB>', ':bnext<CR>', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap('n', '<S-TAB>', ':bprevious<CR>', { noremap = true, silent = true })
|
||||
|
||||
-- Move selected line / block of text in visual mode
|
||||
vim.api.nvim_set_keymap('x', 'K', ':move \'<-2<CR>gv-gv', { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap('x', 'J', ':move \'>+1<CR>gv-gv', { noremap = true, silent = true })
|
||||
|
||||
-- Better nav for omnicomplete
|
||||
vim.cmd('inoremap <expr> <c-j> (\"\\<C-n>\")')
|
||||
vim.cmd('inoremap <expr> <c-k> (\"\\<C-p>\")')
|
||||
|
||||
vim.cmd('vnoremap p "0p')
|
||||
vim.cmd('vnoremap P "0P')
|
||||
-- vim.api.nvim_set_keymap('v', 'p', '"0p', {silent = true})
|
||||
-- vim.api.nvim_set_keymap('v', 'P', '"0P', {silent = true})
|
||||
|
||||
-- vim.cmd('inoremap <expr> <TAB> (\"\\<C-n>\")')
|
||||
-- vim.cmd('inoremap <expr> <S-TAB> (\"\\<C-p>\")')
|
||||
|
||||
-- vim.api.nvim_set_keymap('i', '<C-TAB>', 'compe#complete()', {noremap = true, silent = true, expr = true})
|
||||
|
||||
-- vim.cmd([[
|
||||
-- map p <Plug>(miniyank-autoput)
|
||||
-- map P <Plug>(miniyank-autoPut)
|
||||
-- map <leader>n <Plug>(miniyank-cycle)
|
||||
-- map <leader>N <Plug>(miniyank-cycleback)
|
||||
-- ]])
|
||||
|
||||
-- Toggle the QuickFix window
|
||||
vim.api.nvim_set_keymap('', '<C-q>', ':call QuickFixToggle()<CR>', { noremap = true, silent = true })
|
||||
|
||||
|
||||
|
||||
-- nvim-compe key map
|
||||
-- vim.cmd('inoremap <silent><expr> <C-Space> compe#complete()')
|
||||
-- vim.cmd("inoremap <silent><expr> <CR> compe#confirm('<CR>')")
|
||||
-- vim.cmd("inoremap <silent><expr> <C-e> compe#close('<C-e>')")
|
||||
-- vim.cmd("inoremap <silent><expr> <C-f> compe#scroll({ 'delta': +4 })")
|
||||
-- vim.cmd("inoremap <silent><expr> <C-d> compe#scroll({ 'delta': -4 })")
|
||||
@@ -0,0 +1,225 @@
|
||||
local function my_on_attach(bufnr)
|
||||
local api = require "nvim-tree.api"
|
||||
|
||||
local function opts(desc)
|
||||
return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
|
||||
end
|
||||
|
||||
-- default mappings
|
||||
api.config.mappings.default_on_attach(bufnr)
|
||||
|
||||
-- custom mappings
|
||||
vim.keymap.set('n', '<C-t>', api.tree.change_root_to_parent, opts('Up'))
|
||||
vim.keymap.set('n', '?', api.tree.toggle_help, opts('Help'))
|
||||
vim.keymap.set('n', 'l', api.node.open.edit, opts('Edit'))
|
||||
vim.keymap.set('n', 'h', api.node.navigate.parent_close, opts('Parent Close'))
|
||||
vim.keymap.set('n', 's', api.node.open.horizontal, opts('Horizontal Split'))
|
||||
vim.keymap.set('n', 'v', api.node.open.vertical, opts('Vertical Split'))
|
||||
end
|
||||
|
||||
vim.g.nvim_tree_indent_markers = 1 -- "0 by default, this option shows indent markers when folders are open
|
||||
vim.g.nvim_tree_auto_ignore_ft = 'startify' --empty by default, don't auto open tree on specific filetypes.
|
||||
|
||||
vim.g.nvim_tree_icons = {
|
||||
default = '',
|
||||
symlink = '',
|
||||
git = {unstaged = "", staged = "✓", unmerged = "", renamed = "➜", untracked = ""},
|
||||
folder = {default = "", open = "", empty = "", empty_open = "", symlink = ""}
|
||||
}
|
||||
|
||||
|
||||
return {
|
||||
{
|
||||
'nvim-tree/nvim-tree.lua',
|
||||
dependencies = {
|
||||
'nvim-tree/nvim-web-devicons', -- optional
|
||||
},
|
||||
opts = {
|
||||
on_attach = my_on_attach,
|
||||
disable_netrw = true,
|
||||
hijack_netrw = true,
|
||||
--auto_close = false,
|
||||
filters = {
|
||||
dotfiles = false,
|
||||
custom = {}
|
||||
},
|
||||
git = {
|
||||
enable = true,
|
||||
ignore = false,
|
||||
timeout = 500,
|
||||
},
|
||||
update_focused_file = {
|
||||
-- enables the feature
|
||||
enable = true,
|
||||
-- update the root directory of the tree to the one of the folder containing the file if the file is not under the current root directory
|
||||
-- only relevant when `update_focused_file.enable` is true
|
||||
update_cwd = false,
|
||||
-- list of buffer names / filetypes that will not update the cwd if the file isn't found under the current root directory
|
||||
-- only relevant when `update_focused_file.update_cwd` is true and `update_focused_file.enable` is true
|
||||
ignore_list = {}
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"telescope.nvim",
|
||||
dependencies = {
|
||||
{
|
||||
"nvim-telescope/telescope-fzf-native.nvim",
|
||||
build = "make",
|
||||
},
|
||||
"nvim-telescope/telescope-file-browser.nvim",
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
"<leader>fP",
|
||||
function()
|
||||
require("telescope.builtin").find_files({
|
||||
cwd = require("lazy.core.config").options.root,
|
||||
})
|
||||
end,
|
||||
desc = "Find Plugin File",
|
||||
},
|
||||
{
|
||||
";f",
|
||||
function()
|
||||
local builtin = require("telescope.builtin")
|
||||
builtin.find_files({
|
||||
no_ignore = false,
|
||||
hidden = true,
|
||||
})
|
||||
end,
|
||||
desc = "Lists files in your current working directory, respects .gitignore",
|
||||
},
|
||||
{
|
||||
";r",
|
||||
function()
|
||||
local builtin = require("telescope.builtin")
|
||||
builtin.live_grep({
|
||||
additional_args = { "--hidden" },
|
||||
})
|
||||
end,
|
||||
desc = "Search for a string in your current working directory and get results live as you type, respects .gitignore",
|
||||
},
|
||||
{
|
||||
"\\\\",
|
||||
function()
|
||||
local builtin = require("telescope.builtin")
|
||||
builtin.buffers()
|
||||
end,
|
||||
desc = "Lists open buffers",
|
||||
},
|
||||
{
|
||||
";t",
|
||||
function()
|
||||
local builtin = require("telescope.builtin")
|
||||
builtin.help_tags()
|
||||
end,
|
||||
desc = "Lists available help tags and opens a new window with the relevant help info on <cr>",
|
||||
},
|
||||
{
|
||||
";;",
|
||||
function()
|
||||
local builtin = require("telescope.builtin")
|
||||
builtin.resume()
|
||||
end,
|
||||
desc = "Resume the previous telescope picker",
|
||||
},
|
||||
{
|
||||
";e",
|
||||
function()
|
||||
local builtin = require("telescope.builtin")
|
||||
builtin.diagnostics()
|
||||
end,
|
||||
desc = "Lists Diagnostics for all open buffers or a specific buffer",
|
||||
},
|
||||
{
|
||||
";s",
|
||||
function()
|
||||
local builtin = require("telescope.builtin")
|
||||
builtin.treesitter()
|
||||
end,
|
||||
desc = "Lists Function names, variables, from Treesitter",
|
||||
},
|
||||
{
|
||||
"sf",
|
||||
function()
|
||||
local telescope = require("telescope")
|
||||
|
||||
local function telescope_buffer_dir()
|
||||
return vim.fn.expand("%:p:h")
|
||||
end
|
||||
|
||||
telescope.extensions.file_browser.file_browser({
|
||||
path = "%:p:h",
|
||||
cwd = telescope_buffer_dir(),
|
||||
respect_gitignore = false,
|
||||
hidden = true,
|
||||
grouped = true,
|
||||
previewer = false,
|
||||
initial_mode = "normal",
|
||||
layout_config = { height = 40 },
|
||||
})
|
||||
end,
|
||||
desc = "Open File Browser with the path of the current buffer",
|
||||
},
|
||||
},
|
||||
config = function(_, opts)
|
||||
local telescope = require("telescope")
|
||||
local actions = require("telescope.actions")
|
||||
local fb_actions = require("telescope").extensions.file_browser.actions
|
||||
|
||||
opts.defaults = vim.tbl_deep_extend("force", opts.defaults, {
|
||||
wrap_results = true,
|
||||
layout_strategy = "horizontal",
|
||||
layout_config = { prompt_position = "top" },
|
||||
sorting_strategy = "ascending",
|
||||
winblend = 0,
|
||||
mappings = {
|
||||
n = {},
|
||||
},
|
||||
})
|
||||
opts.pickers = {
|
||||
diagnostics = {
|
||||
theme = "ivy",
|
||||
initial_mode = "normal",
|
||||
layout_config = {
|
||||
preview_cutoff = 9999,
|
||||
},
|
||||
},
|
||||
}
|
||||
opts.extensions = {
|
||||
file_browser = {
|
||||
theme = "dropdown",
|
||||
-- disables netrw and use telescope-file-browser in its place
|
||||
hijack_netrw = true,
|
||||
mappings = {
|
||||
-- your custom insert mode mappings
|
||||
["n"] = {
|
||||
-- your custom normal mode mappings
|
||||
["N"] = fb_actions.create,
|
||||
["h"] = fb_actions.goto_parent_dir,
|
||||
["/"] = function()
|
||||
vim.cmd("startinsert")
|
||||
end,
|
||||
["<C-u>"] = function(prompt_bufnr)
|
||||
for i = 1, 10 do
|
||||
actions.move_selection_previous(prompt_bufnr)
|
||||
end
|
||||
end,
|
||||
["<C-d>"] = function(prompt_bufnr)
|
||||
for i = 1, 10 do
|
||||
actions.move_selection_next(prompt_bufnr)
|
||||
end
|
||||
end,
|
||||
["<PageUp>"] = actions.preview_scrolling_up,
|
||||
["<PageDown>"] = actions.preview_scrolling_down,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
telescope.setup(opts)
|
||||
require("telescope").load_extension("fzf")
|
||||
require("telescope").load_extension("file_browser")
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,157 @@
|
||||
return {
|
||||
-- tools
|
||||
{
|
||||
"williamboman/mason.nvim",
|
||||
opts = function(_, opts)
|
||||
vim.list_extend(opts.ensure_installed, {
|
||||
"stylua",
|
||||
"selene",
|
||||
"luacheck",
|
||||
"shellcheck",
|
||||
"shfmt",
|
||||
"tailwindcss-language-server",
|
||||
"typescript-language-server",
|
||||
"css-lsp",
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- lsp servers
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
opts = {
|
||||
inlay_hints = { enabled = false },
|
||||
---@type lspconfig.options
|
||||
servers = {
|
||||
cssls = {},
|
||||
tailwindcss = {
|
||||
root_dir = function(...)
|
||||
return require("lspconfig.util").root_pattern(".git")(...)
|
||||
end,
|
||||
},
|
||||
tsserver = {
|
||||
root_dir = function(...)
|
||||
return require("lspconfig.util").root_pattern(".git")(...)
|
||||
end,
|
||||
single_file_support = false,
|
||||
settings = {
|
||||
typescript = {
|
||||
inlayHints = {
|
||||
includeInlayParameterNameHints = "literal",
|
||||
includeInlayParameterNameHintsWhenArgumentMatchesName = false,
|
||||
includeInlayFunctionParameterTypeHints = true,
|
||||
includeInlayVariableTypeHints = false,
|
||||
includeInlayPropertyDeclarationTypeHints = true,
|
||||
includeInlayFunctionLikeReturnTypeHints = true,
|
||||
includeInlayEnumMemberValueHints = true,
|
||||
},
|
||||
},
|
||||
javascript = {
|
||||
inlayHints = {
|
||||
includeInlayParameterNameHints = "all",
|
||||
includeInlayParameterNameHintsWhenArgumentMatchesName = false,
|
||||
includeInlayFunctionParameterTypeHints = true,
|
||||
includeInlayVariableTypeHints = true,
|
||||
includeInlayPropertyDeclarationTypeHints = true,
|
||||
includeInlayFunctionLikeReturnTypeHints = true,
|
||||
includeInlayEnumMemberValueHints = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
html = {},
|
||||
yamlls = {
|
||||
settings = {
|
||||
yaml = {
|
||||
keyOrdering = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
lua_ls = {
|
||||
-- enabled = false,
|
||||
single_file_support = true,
|
||||
settings = {
|
||||
Lua = {
|
||||
workspace = {
|
||||
checkThirdParty = false,
|
||||
},
|
||||
completion = {
|
||||
workspaceWord = true,
|
||||
callSnippet = "Both",
|
||||
},
|
||||
misc = {
|
||||
parameters = {
|
||||
-- "--log-level=trace",
|
||||
},
|
||||
},
|
||||
hint = {
|
||||
enable = true,
|
||||
setType = false,
|
||||
paramType = true,
|
||||
paramName = "Disable",
|
||||
semicolon = "Disable",
|
||||
arrayIndex = "Disable",
|
||||
},
|
||||
doc = {
|
||||
privateName = { "^_" },
|
||||
},
|
||||
type = {
|
||||
castNumberToInteger = true,
|
||||
},
|
||||
diagnostics = {
|
||||
disable = { "incomplete-signature-doc", "trailing-space" },
|
||||
-- enable = false,
|
||||
groupSeverity = {
|
||||
strong = "Warning",
|
||||
strict = "Warning",
|
||||
},
|
||||
groupFileStatus = {
|
||||
["ambiguity"] = "Opened",
|
||||
["await"] = "Opened",
|
||||
["codestyle"] = "None",
|
||||
["duplicate"] = "Opened",
|
||||
["global"] = "Opened",
|
||||
["luadoc"] = "Opened",
|
||||
["redefined"] = "Opened",
|
||||
["strict"] = "Opened",
|
||||
["strong"] = "Opened",
|
||||
["type-check"] = "Opened",
|
||||
["unbalanced"] = "Opened",
|
||||
["unused"] = "Opened",
|
||||
},
|
||||
unusedLocalExclude = { "_*" },
|
||||
},
|
||||
format = {
|
||||
enable = false,
|
||||
defaultConfig = {
|
||||
indent_style = "space",
|
||||
indent_size = "2",
|
||||
continuation_indent_size = "2",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
gopls = {
|
||||
setup = {
|
||||
cmd = { "gopls", "serve" }, -- use cmd in path, I can update it easily
|
||||
settings = {
|
||||
gopls = {
|
||||
analyses = {
|
||||
nilness = true,
|
||||
unusedparams = true,
|
||||
unusedwrite = true,
|
||||
useany = true,
|
||||
},
|
||||
staticcheck = false
|
||||
}
|
||||
},
|
||||
root_dir = require 'lspconfig'.util.root_pattern(".git", "go.mod", "go.work"),
|
||||
init_options = { usePlaceholders = true, completeUnimported = true },
|
||||
},
|
||||
},
|
||||
},
|
||||
setup = {},
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
return {
|
||||
{ "nvim-treesitter/playground", cmd = "TSPlaygroundToggle" },
|
||||
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"astro",
|
||||
"cmake",
|
||||
"cpp",
|
||||
"css",
|
||||
"fish",
|
||||
"gitignore",
|
||||
"go",
|
||||
"graphql",
|
||||
"http",
|
||||
"java",
|
||||
"php",
|
||||
"rust",
|
||||
"scss",
|
||||
"sql",
|
||||
"svelte",
|
||||
},
|
||||
|
||||
-- matchup = {
|
||||
-- enable = true,
|
||||
-- },
|
||||
|
||||
-- https://github.com/nvim-treesitter/playground#query-linter
|
||||
query_linter = {
|
||||
enable = true,
|
||||
use_virtual_text = true,
|
||||
lint_events = { "BufWrite", "CursorHold" },
|
||||
},
|
||||
|
||||
playground = {
|
||||
enable = true,
|
||||
disable = {},
|
||||
updatetime = 25, -- Debounced time for highlighting nodes in the playground from source code
|
||||
persist_queries = true, -- Whether the query persists across vim sessions
|
||||
keybindings = {
|
||||
toggle_query_editor = "o",
|
||||
toggle_hl_groups = "i",
|
||||
toggle_injected_languages = "t",
|
||||
toggle_anonymous_nodes = "a",
|
||||
toggle_language_display = "I",
|
||||
focus_language = "f",
|
||||
unfocus_language = "F",
|
||||
update = "R",
|
||||
goto_node = "<cr>",
|
||||
show_help = "?",
|
||||
},
|
||||
},
|
||||
},
|
||||
config = function(_, opts)
|
||||
require("nvim-treesitter.configs").setup(opts)
|
||||
|
||||
-- MDX
|
||||
vim.filetype.add({
|
||||
extension = {
|
||||
mdx = "mdx",
|
||||
},
|
||||
})
|
||||
vim.treesitter.language.register("markdown", "mdx")
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
-- selene: allow(global_usage)
|
||||
|
||||
local M = {}
|
||||
|
||||
function M.get_loc()
|
||||
local me = debug.getinfo(1, "S")
|
||||
local level = 2
|
||||
local info = debug.getinfo(level, "S")
|
||||
while info and (info.source == me.source or info.source == "@" .. vim.env.MYVIMRC or info.what ~= "Lua") do
|
||||
level = level + 1
|
||||
info = debug.getinfo(level, "S")
|
||||
end
|
||||
info = info or me
|
||||
local source = info.source:sub(2)
|
||||
source = vim.loop.fs_realpath(source) or source
|
||||
return source .. ":" .. info.linedefined
|
||||
end
|
||||
|
||||
---@param value any
|
||||
---@param opts? {loc:string}
|
||||
function M._dump(value, opts)
|
||||
opts = opts or {}
|
||||
opts.loc = opts.loc or M.get_loc()
|
||||
if vim.in_fast_event() then
|
||||
return vim.schedule(function()
|
||||
M._dump(value, opts)
|
||||
end)
|
||||
end
|
||||
opts.loc = vim.fn.fnamemodify(opts.loc, ":~:.")
|
||||
local msg = vim.inspect(value)
|
||||
vim.notify(msg, vim.log.levels.INFO, {
|
||||
title = "Debug: " .. opts.loc,
|
||||
on_open = function(win)
|
||||
vim.wo[win].conceallevel = 3
|
||||
vim.wo[win].concealcursor = ""
|
||||
vim.wo[win].spell = false
|
||||
local buf = vim.api.nvim_win_get_buf(win)
|
||||
if not pcall(vim.treesitter.start, buf, "lua") then
|
||||
vim.bo[buf].filetype = "lua"
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
function M.dump(...)
|
||||
local value = { ... }
|
||||
if vim.tbl_isempty(value) then
|
||||
value = nil
|
||||
else
|
||||
value = vim.tbl_islist(value) and vim.tbl_count(value) <= 1 and value[1] or value
|
||||
end
|
||||
M._dump(value)
|
||||
end
|
||||
|
||||
function M.extmark_leaks()
|
||||
local nsn = vim.api.nvim_get_namespaces()
|
||||
|
||||
local counts = {}
|
||||
|
||||
for name, ns in pairs(nsn) do
|
||||
for _, buf in ipairs(vim.api.nvim_list_bufs()) do
|
||||
local count = #vim.api.nvim_buf_get_extmarks(buf, ns, 0, -1, {})
|
||||
if count > 0 then
|
||||
counts[#counts + 1] = {
|
||||
name = name,
|
||||
buf = buf,
|
||||
count = count,
|
||||
ft = vim.bo[buf].ft,
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
table.sort(counts, function(a, b)
|
||||
return a.count > b.count
|
||||
end)
|
||||
dd(counts)
|
||||
end
|
||||
|
||||
function estimateSize(value, visited)
|
||||
if value == nil then
|
||||
return 0
|
||||
end
|
||||
local bytes = 0
|
||||
|
||||
-- initialize the visited table if not already done
|
||||
--- @type table<any, true>
|
||||
visited = visited or {}
|
||||
|
||||
-- handle already-visited value to avoid infinite recursion
|
||||
if visited[value] then
|
||||
return 0
|
||||
else
|
||||
visited[value] = true
|
||||
end
|
||||
|
||||
if type(value) == "boolean" or value == nil then
|
||||
bytes = 4
|
||||
elseif type(value) == "number" then
|
||||
bytes = 8
|
||||
elseif type(value) == "string" then
|
||||
bytes = string.len(value) + 24
|
||||
elseif type(value) == "function" then
|
||||
bytes = 32 -- base size for a function
|
||||
-- add size of upvalues
|
||||
local i = 1
|
||||
while true do
|
||||
local name, val = debug.getupvalue(value, i)
|
||||
if not name then
|
||||
break
|
||||
end
|
||||
bytes = bytes + estimateSize(val, visited)
|
||||
i = i + 1
|
||||
end
|
||||
elseif type(value) == "table" then
|
||||
bytes = 40 -- base size for a table entry
|
||||
for k, v in pairs(value) do
|
||||
bytes = bytes + estimateSize(k, visited) + estimateSize(v, visited)
|
||||
end
|
||||
local mt = debug.getmetatable(value)
|
||||
if mt then
|
||||
bytes = bytes + estimateSize(mt, visited)
|
||||
end
|
||||
end
|
||||
return bytes
|
||||
end
|
||||
|
||||
function M.module_leaks(filter)
|
||||
local sizes = {}
|
||||
for modname, mod in pairs(package.loaded) do
|
||||
if not filter or modname:match(filter) then
|
||||
local root = modname:match("^([^%.]+)%..*$") or modname
|
||||
-- root = modname
|
||||
sizes[root] = sizes[root] or { mod = root, size = 0 }
|
||||
sizes[root].size = sizes[root].size + estimateSize(mod) / 1024 / 1024
|
||||
end
|
||||
end
|
||||
sizes = vim.tbl_values(sizes)
|
||||
table.sort(sizes, function(a, b)
|
||||
return a.size > b.size
|
||||
end)
|
||||
dd(sizes)
|
||||
end
|
||||
|
||||
function M.get_upvalue(func, name)
|
||||
local i = 1
|
||||
while true do
|
||||
local n, v = debug.getupvalue(func, i)
|
||||
if not n then
|
||||
break
|
||||
end
|
||||
if n == name then
|
||||
return v
|
||||
end
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
Reference in New Issue
Block a user