added latex support and reorg ftplugins
This commit is contained in:
parent
7f1b34fd6f
commit
f2eaf7c67a
|
@ -0,0 +1,2 @@
|
||||||
|
;extend
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
;extends
|
||||||
|
|
||||||
|
(fenced_code_block (code_fence_content) @class.inner) @class.outer
|
||||||
|
|
||||||
|
(paragraph) @function.outer @function.inner
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
;extends
|
||||||
|
|
||||||
|
[
|
||||||
|
(shortcut_link)
|
||||||
|
] @nospell
|
||||||
|
|
||||||
|
(strikethrough
|
||||||
|
(emphasis_delimiter)
|
||||||
|
(strikethrough
|
||||||
|
(emphasis_delimiter)
|
||||||
|
(emphasis_delimiter))
|
||||||
|
(emphasis_delimiter))@markup.doublestrikethrough
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
; Injection for code blocks
|
||||||
|
(ranged_verbatim_tag (tag_name) @_tagname (tag_parameters .(tag_param) @injection.language) (ranged_verbatim_tag_content) @injection.content (#any-of? @_tagname "code" "embed"))
|
||||||
|
(ranged_verbatim_tag (tag_name) @_tagname (tag_parameters)? (ranged_verbatim_tag_content) @injection.content (#eq? @_tagname "math") (#set! injection.language "latex"))
|
||||||
|
|
||||||
|
(
|
||||||
|
(inline_math) @injection.content
|
||||||
|
(#offset! @injection.content 0 1 0 -1)
|
||||||
|
(#set! injection.language "latex")
|
||||||
|
)
|
||||||
|
|
||||||
|
(ranged_verbatim_tag (tag_name) @_tagname (ranged_verbatim_tag_content) @injection.content (#eq? @_tagname "document.meta") (#set! injection.language "norg_meta"))
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
;extends
|
||||||
|
(
|
||||||
|
(comment) @comment
|
||||||
|
(#match? @comment "^\\#\\|")
|
||||||
|
) @text.literal
|
||||||
|
|
||||||
|
|
||||||
|
(
|
||||||
|
(comment) @content
|
||||||
|
(#match? @content "^\\# ?\\%\\%")
|
||||||
|
) @class.outer @text.literal
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
;extends
|
||||||
|
|
||||||
|
(
|
||||||
|
(comment) @content1
|
||||||
|
(#match? @content1 "^\\# ?\\%\\%")
|
||||||
|
) @class.inner
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
;extends
|
||||||
|
(
|
||||||
|
(comment) @comment
|
||||||
|
(#match? @comment "^\\#\\|")
|
||||||
|
) @text.literal
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
;extends
|
||||||
|
|
||||||
|
(
|
||||||
|
(comment) @content1
|
||||||
|
(#match? @content1 "^\\# ?\\%\\%")
|
||||||
|
) @class.inner
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
;extends
|
||||||
|
(macro_invocation
|
||||||
|
(scoped_identifier
|
||||||
|
path: (identifier) @path (#eq? @path "sqlx")
|
||||||
|
name: (identifier) @name (#match? @name "^query.*")
|
||||||
|
)
|
||||||
|
|
||||||
|
(token_tree
|
||||||
|
(raw_string_literal) @injection.content
|
||||||
|
(#set! injection.language "sql")
|
||||||
|
(#set! injection.include-children)
|
||||||
|
)
|
||||||
|
(#offset! @injection.content 0 3 0 -2)
|
||||||
|
)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
vim.opt.expandtab = true
|
vim.opt.expandtab = true
|
||||||
vim.opt.shiftwidth = 2
|
vim.opt.shiftwidth = 4
|
||||||
vim.opt.tabstop = 2
|
vim.opt.tabstop = 4
|
||||||
vim.opt.expandtab = true
|
vim.opt.expandtab = true
|
||||||
|
|
||||||
vim.opt_local.formatoptions:remove('o')
|
vim.opt_local.formatoptions:remove('o')
|
3
init.lua
3
init.lua
|
@ -13,6 +13,8 @@ if not vim.loop.fs_stat(lazypath) then
|
||||||
end
|
end
|
||||||
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
|
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
|
||||||
|
|
||||||
|
vim.cmd('filetype plugin on')
|
||||||
|
|
||||||
vim.g.mapleader = ' '
|
vim.g.mapleader = ' '
|
||||||
vim.g.maplocalleader = ' '
|
vim.g.maplocalleader = ' '
|
||||||
|
|
||||||
|
@ -23,4 +25,3 @@ require('config.mappings')
|
||||||
require('config.utils')
|
require('config.utils')
|
||||||
require('config.themes')
|
require('config.themes')
|
||||||
|
|
||||||
vim.cmd('filetype plugin on')
|
|
||||||
|
|
|
@ -64,3 +64,29 @@ vim.cmd([[
|
||||||
autocmd TermOpen * tnoremap <Esc> <C-\><C-n>
|
autocmd TermOpen * tnoremap <Esc> <C-\><C-n>
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
-- Open PDF in the background when a .tex file is opened
|
||||||
|
vim.api.nvim_create_autocmd("BufEnter", {
|
||||||
|
pattern = "*.tex",
|
||||||
|
callback = function()
|
||||||
|
-- Construct an absolute path to the PDF file
|
||||||
|
local pdf_path = vim.fn.expand('%:p:h') .. "/output/" .. vim.fn.expand('%:t:r') .. '.pdf'
|
||||||
|
if vim.fn.filereadable(pdf_path) == 1 then
|
||||||
|
-- Start Zathura asynchronously in the background with an absolute path
|
||||||
|
vim.fn.jobstart({ 'nohup', 'zathura', pdf_path, '>/dev/null', '2>&1', '&' }, { detach = true })
|
||||||
|
else
|
||||||
|
print("PDF file not found: " .. pdf_path)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Close Zathura gracefully when leaving Neovim
|
||||||
|
vim.api.nvim_create_autocmd("VimLeavePre", {
|
||||||
|
callback = function()
|
||||||
|
-- Attempt to terminate Zathura gracefully with a grace period
|
||||||
|
vim.fn.system({ 'pkill', '-TERM', '-f', 'zathura' })
|
||||||
|
vim.defer_fn(function()
|
||||||
|
vim.fn.system({ 'pkill', '-KILL', '-f', 'zathura' })
|
||||||
|
end, 2000) -- Wait for 2 seconds before force killing if necessary
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,10 @@ vim.keymap.set('n', '<leader>bs', '<cmd>split<CR>', { desc = 'Openn Buf Horizont
|
||||||
vim.keymap.set('n', '<leader>bv', '<cmd>vsp<CR>', { desc = 'Open Buf Vertical Split' })
|
vim.keymap.set('n', '<leader>bv', '<cmd>vsp<CR>', { desc = 'Open Buf Vertical Split' })
|
||||||
vim.keymap.set('n', '<leader>bt', '<cmd>terminal<CR>')
|
vim.keymap.set('n', '<leader>bt', '<cmd>terminal<CR>')
|
||||||
|
|
||||||
|
-- -- open terminal for R and Python
|
||||||
|
-- vim.keymap.set('n', '<leader>bR', '<cmd>terminal R<CR>', { desc = 'Open R Terminal' })
|
||||||
|
-- vim.keymap.set('n', '<leader>bP', '<cmd>terminal python<CR>', { desc = 'Open Python Terminal' })
|
||||||
|
|
||||||
-- Editing Keymaps
|
-- Editing Keymaps
|
||||||
vim.keymap.set('x', '<leader>p', [["_dP"]], { desc = 'Paste without register' })
|
vim.keymap.set('x', '<leader>p', [["_dP"]], { desc = 'Paste without register' })
|
||||||
vim.keymap.set({ 'n', 'v' }, '<leader>d', [["_d"]], { desc = 'Delete without register' })
|
vim.keymap.set({ 'n', 'v' }, '<leader>d', [["_d"]], { desc = 'Delete without register' })
|
||||||
|
@ -45,16 +49,16 @@ vim.keymap.set('n', '<leader>Y', '"+Y')
|
||||||
-- replace current word in current scope
|
-- replace current word in current scope
|
||||||
vim.keymap.set(
|
vim.keymap.set(
|
||||||
'n',
|
'n',
|
||||||
'<leader>r',
|
'<leader>rw',
|
||||||
':%s/\\<<C-r><C-w>\\>/<C-r><C-w>/gI<Left><Left><Left>',
|
':%s/\\<<C-r><C-w>\\>/<C-r><C-w>/gI<Left><Left><Left>',
|
||||||
{ desc = '[R]eplace Current Word in Current Scope' }
|
{ desc = '[R]eplace Current [W]ord in Current Scope' }
|
||||||
)
|
)
|
||||||
-- replace current word in file scope
|
-- replace current word in file scope
|
||||||
vim.keymap.set(
|
vim.keymap.set(
|
||||||
'n',
|
'n',
|
||||||
'<leader>R',
|
'<leader>rW',
|
||||||
':%s/\\<<C-r><C-w>\\>/<C-r><C-w>/gI<Left><Left><Left>',
|
':%s/\\<<C-r><C-w>\\>/<C-r><C-w>/gI<Left><Left><Left>',
|
||||||
{ desc = '[R]eplace Current Word in File Scope' }
|
{ desc = '[R]eplace Current [W]ord in File Scope' }
|
||||||
)
|
)
|
||||||
|
|
||||||
-- Open vertical split pane
|
-- Open vertical split pane
|
||||||
|
@ -87,7 +91,7 @@ vim.keymap.set({ 'n', 'v' }, '<leader>sw', function()
|
||||||
end, { desc = '[S]earch current [W]ord' })
|
end, { desc = '[S]earch current [W]ord' })
|
||||||
vim.keymap.set('n', '<leader>sp', function()
|
vim.keymap.set('n', '<leader>sp', function()
|
||||||
require('telescope.builtin').grep_string({ search = vim.fn.input('Grep Search > ') })
|
require('telescope.builtin').grep_string({ search = vim.fn.input('Grep Search > ') })
|
||||||
end, { desc = '[S]search [P]roject' })
|
end, { desc = '[S]earch [P]roject' })
|
||||||
vim.keymap.set('n', '<leader>sG', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' })
|
vim.keymap.set('n', '<leader>sG', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' })
|
||||||
vim.keymap.set('n', '<leader>sg', ':LiveGrepGitRoot<cr>', { desc = '[S]earch by [G]rep on Git Root' })
|
vim.keymap.set('n', '<leader>sg', ':LiveGrepGitRoot<cr>', { desc = '[S]earch by [G]rep on Git Root' })
|
||||||
vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' })
|
vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' })
|
||||||
|
@ -97,13 +101,43 @@ vim.keymap.set('n', '<leader>sr', require('telescope.builtin').resume, { desc =
|
||||||
-- Diagnostic keymaps
|
-- Diagnostic keymaps
|
||||||
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' })
|
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' })
|
||||||
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' })
|
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' })
|
||||||
vim.keymap.set('n', '<leader>e', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' })
|
-- vim.keymap.set('n', '<leader>ef', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' })
|
||||||
-- vim.keymap.set('n', '<leader>vd', function()
|
-- vim.keymap.set('n', '<leader>ee', function()
|
||||||
-- vim.diagnostic.setloclist()
|
-- vim.diagnostic.setloclist()
|
||||||
-- vim.cmd('lopen')
|
-- vim.cmd('lopen')
|
||||||
-- end, { desc = 'Open the diagnostics location list' })
|
-- end, { desc = 'Open the diagnostics location list' })
|
||||||
|
|
||||||
-- Refactoring Keymaps
|
-- local runner = require("quarto.runner")
|
||||||
|
-- vim.keymap.set('n', '<leader>qrc', runner.run_cell, { desc = '[R]un [C]ell', silent = true })
|
||||||
|
-- vim.keymap.set('n', '<leader>qra', runner.run_above, { desc = '[R]un cell and [A]bove', silent = true })
|
||||||
|
-- vim.keymap.set('n', "<leader>qrA", runner.run_all, { desc = "run all cells", silent = true })
|
||||||
|
-- vim.keymap.set('n', "<leader>qrl", runner.run_line, { desc = "run line", silent = true })
|
||||||
|
-- vim.keymap.set('v', '<leader>qr', runner.run_range, { desc = "run visual range", silent = true })
|
||||||
|
-- vim.keymap.set('n', '<leader>qRA', function()
|
||||||
|
-- runner.run_all(true)
|
||||||
|
-- end, { desc = "run all cells of all languages", silent = true })
|
||||||
|
|
||||||
|
-- Latex-specific Keymaps
|
||||||
|
-- Keybinding to compile LaTeX to PDF using xelatex with latexmk and output to the "output" directory
|
||||||
|
vim.keymap.set('n', '<leader>ll', ':!mkdir -p output && latexmk -pdf -xelatex -output-directory=output -synctex=1 %<CR>',
|
||||||
|
{
|
||||||
|
desc = 'Compile LaTeX to PDF using xelatex with SyncTeX in the output directory',
|
||||||
|
noremap = true,
|
||||||
|
silent = true
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
-- Keybinding to view the compiled PDF in Zathura from the output directory
|
||||||
|
vim.keymap.set('n', '<leader>lv', function()
|
||||||
|
local pdf_path = vim.fn.expand('%:p:h') .. '/output/' .. vim.fn.expand('%:t:r') .. '.pdf'
|
||||||
|
vim.cmd(':silent !nohup zathura ' .. pdf_path .. ' >/dev/null 2>&1 &')
|
||||||
|
end, {
|
||||||
|
desc = 'View PDF in Zathura from the output directory',
|
||||||
|
noremap = true,
|
||||||
|
silent = true
|
||||||
|
})
|
||||||
|
|
||||||
|
-- -- Refactoring Keymaps
|
||||||
-- vim.keymap.set({ "x" }, "<leader>re", [[<Esc><Cmd>lua require('refactoring').refactor('Extract Function')<CR>]],
|
-- vim.keymap.set({ "x" }, "<leader>re", [[<Esc><Cmd>lua require('refactoring').refactor('Extract Function')<CR>]],
|
||||||
-- { noremap = true, silent = true, expr = false, desc = "Extract Function" })
|
-- { noremap = true, silent = true, expr = false, desc = "Extract Function" })
|
||||||
-- vim.keymap.set({ "x" }, "<leader>rf", [[<Esc><Cmd>lua require('refactoring').refactor('Extract Function To File')<CR>]],
|
-- vim.keymap.set({ "x" }, "<leader>rf", [[<Esc><Cmd>lua require('refactoring').refactor('Extract Function To File')<CR>]],
|
||||||
|
|
|
@ -1,23 +1,27 @@
|
||||||
|
-- Function to get the current visual selection
|
||||||
|
local function get_visual_selection()
|
||||||
|
vim.cmd 'noau normal! "vy"'
|
||||||
|
local text = vim.fn.getreg 'v'
|
||||||
|
vim.fn.setreg('v', {})
|
||||||
|
|
||||||
|
text = string.gsub(text, '\n', '')
|
||||||
|
if #text > 0 then
|
||||||
|
return text
|
||||||
|
else
|
||||||
|
return ''
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Function to get the current search query
|
||||||
|
local function get_search_query()
|
||||||
|
local word_under_cursor = vim.fn.expand '<cword>'
|
||||||
|
local visual_selection = require('config.utils').get_visual_selection()
|
||||||
|
|
||||||
|
return visual_selection ~= '' and visual_selection or word_under_cursor
|
||||||
|
end
|
||||||
|
|
||||||
return {
|
return {
|
||||||
-- Function to get the current visual selection
|
get_visual_selection = get_visual_selection,
|
||||||
get_visual_selection = function()
|
get_search_query = get_search_query,
|
||||||
vim.cmd 'noau normal! "vy"'
|
|
||||||
local text = vim.fn.getreg 'v'
|
|
||||||
vim.fn.setreg('v', {})
|
|
||||||
|
|
||||||
text = string.gsub(text, '\n', '')
|
|
||||||
if #text > 0 then
|
|
||||||
return text
|
|
||||||
else
|
|
||||||
return ''
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
-- Function to get the current search query
|
|
||||||
get_search_query = function()
|
|
||||||
local word_under_cursor = vim.fn.expand '<cword>'
|
|
||||||
local visual_selection = require('config.utils').get_visual_selection()
|
|
||||||
|
|
||||||
return visual_selection ~= '' and visual_selection or word_under_cursor
|
|
||||||
end,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,15 +21,19 @@ return {
|
||||||
-- Set completion options
|
-- Set completion options
|
||||||
vim.opt.completeopt = { 'menu', 'menuone', 'noselect' }
|
vim.opt.completeopt = { 'menu', 'menuone', 'noselect' }
|
||||||
|
|
||||||
-- Lazy load snippets from friendly-snippets
|
|
||||||
require('luasnip.loaders.from_vscode').lazy_load()
|
|
||||||
|
|
||||||
-- Import required modules
|
-- Import required modules
|
||||||
local cmp = require('cmp')
|
local cmp = require('cmp')
|
||||||
local luasnip = require('luasnip')
|
local luasnip = require('luasnip')
|
||||||
|
|
||||||
-- Setup luasnip
|
-- Setup luasnip
|
||||||
luasnip.config.setup({})
|
luasnip.config.setup({
|
||||||
|
history = true,
|
||||||
|
updateevents = 'TextChanged,TextChangedI',
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Lazy load snippets from friendly-snippets and custom snippets
|
||||||
|
require('luasnip.loaders.from_vscode').lazy_load()
|
||||||
|
require('luasnip.loaders.from_vscode').load(vim.fn.stdpath('config') .. '/snippets')
|
||||||
|
|
||||||
-- Setup nvim-cmp
|
-- Setup nvim-cmp
|
||||||
cmp.setup({
|
cmp.setup({
|
||||||
|
@ -90,12 +94,6 @@ return {
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Additional luasnip configuration
|
|
||||||
luasnip.config.set_config({
|
|
||||||
history = true,
|
|
||||||
updateevents = 'TextChanged,TextChangedI',
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Setup for SQL filetype with vim-dadbod-completion
|
-- Setup for SQL filetype with vim-dadbod-completion
|
||||||
cmp.setup.filetype('sql', {
|
cmp.setup.filetype('sql', {
|
||||||
sources = cmp.config.sources({
|
sources = cmp.config.sources({
|
||||||
|
|
|
@ -16,6 +16,10 @@ return {
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
go = { 'gofumpt', 'goimports' },
|
go = { 'gofumpt', 'goimports' },
|
||||||
|
yaml = { 'prettier' }, -- Added YAML formatter
|
||||||
|
bash = { 'shfmt' }, -- Added Bash formatter
|
||||||
|
rust = { 'rustfmt' }, -- Added Rust formatter
|
||||||
|
dockerfile = { 'hadolint' }, -- Added Dockerfile formatter
|
||||||
}
|
}
|
||||||
|
|
||||||
require('conform').setup({
|
require('conform').setup({
|
||||||
|
@ -28,12 +32,15 @@ return {
|
||||||
|
|
||||||
require('mason-tool-installer').setup({
|
require('mason-tool-installer').setup({
|
||||||
ensure_installed = {
|
ensure_installed = {
|
||||||
'stylua',
|
'stylua', -- Lua
|
||||||
'ruff',
|
'ruff', -- Python
|
||||||
'isort',
|
'isort', -- Python
|
||||||
'black',
|
'black', -- Python
|
||||||
'gofumpt',
|
'gofumpt', -- Go
|
||||||
'goimports',
|
'goimports', -- Go
|
||||||
|
'prettier', -- YAML, JSON, etc.
|
||||||
|
'shfmt', -- Bash
|
||||||
|
'hadolint', -- Dockerfile
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
|
|
|
@ -1,47 +1,46 @@
|
||||||
return {
|
return {
|
||||||
'tpope/vim-fugitive',
|
'tpope/vim-fugitive',
|
||||||
config = function()
|
config = function()
|
||||||
vim.keymap.set('n', '<leader>gs', vim.cmd.Git)
|
-- General key mappings for Fugitive
|
||||||
|
vim.keymap.set('n', '<leader>gs', vim.cmd.Git, { desc = 'Open Git status' })
|
||||||
|
|
||||||
local jfraeys_fugitive = vim.api.nvim_create_augroup('jfraeys_fugitive', {})
|
-- Create an autocommand group for Fugitive-specific settings
|
||||||
|
local fugitive_augroup = vim.api.nvim_create_augroup('fugitive', { clear = true })
|
||||||
|
|
||||||
local autocmd = vim.api.nvim_create_autocmd
|
-- Set up autocommands for Fugitive buffers
|
||||||
autocmd('BufWinEnter', {
|
vim.api.nvim_create_autocmd('BufWinEnter', {
|
||||||
group = jfraeys_fugitive,
|
group = fugitive_augroup,
|
||||||
pattern = '*',
|
pattern = '*',
|
||||||
callback = function()
|
callback = function()
|
||||||
if vim.bo.ft ~= 'fugitive' then
|
if vim.bo.ft ~= 'fugitive' then return end
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local bufnr = vim.api.nvim_get_current_buf()
|
local bufnr = vim.api.nvim_get_current_buf()
|
||||||
local opts = { buffer = bufnr, remap = false }
|
local opts = { buffer = bufnr, remap = false }
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>p', function()
|
-- Key mappings specific to Fugitive buffers
|
||||||
vim.cmd.Git 'push'
|
vim.keymap.set('n', '<leader>p', function() vim.cmd.Git('push') end, opts)
|
||||||
end, opts)
|
vim.keymap.set('n', '<leader>P', function() vim.cmd.Git('pull --rebase') end, opts)
|
||||||
|
|
||||||
-- rebase always
|
|
||||||
vim.keymap.set('n', '<leader>P', function()
|
|
||||||
vim.cmd.Git { 'pull', '--rebase' }
|
|
||||||
end, opts)
|
|
||||||
|
|
||||||
-- NOTE: It allows me to easily set the branch I am pushing and any tracking
|
|
||||||
-- needed if I did not set the branch up correctly
|
|
||||||
vim.keymap.set('n', '<leader>t', ':Git push -u origin ', opts)
|
vim.keymap.set('n', '<leader>t', ':Git push -u origin ', opts)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.keymap.set('n', 'gu', '<cmd>diffget //2<CR>')
|
-- Additional key mappings outside of Fugitive buffers
|
||||||
vim.keymap.set('n', 'gh', '<cmd>diffget //3<CR>')
|
vim.keymap.set('n', 'gu', '<cmd>diffget //2<CR>', { desc = 'Get diff for version 2' })
|
||||||
|
vim.keymap.set('n', 'gh', '<cmd>diffget //3<CR>', { desc = 'Get diff for version 3' })
|
||||||
|
|
||||||
|
-- Set up a faster command for Fugitive in Lua
|
||||||
|
local function git_command(args)
|
||||||
|
local cmd = 'Git ' .. args
|
||||||
|
vim.cmd(cmd)
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command('Git', function(params)
|
||||||
|
git_command(params.args)
|
||||||
|
end, { nargs = '*' })
|
||||||
end,
|
end,
|
||||||
cond = function()
|
cond = function()
|
||||||
-- Function to check if the current directory is a Git repository
|
-- Efficient Git repository check
|
||||||
local is_git_repo = function()
|
return vim.fn.isdirectory('.git') == 1
|
||||||
local git_dir = vim.fn.finddir('.git', '.;')
|
|
||||||
return git_dir and #git_dir > 0
|
|
||||||
end
|
|
||||||
return is_git_repo()
|
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,104 @@
|
||||||
|
return {
|
||||||
|
-- {
|
||||||
|
-- 'vhyrro/luarocks.nvim',
|
||||||
|
-- priority = 1001,
|
||||||
|
-- opts = {
|
||||||
|
-- rocks = { 'magick' },
|
||||||
|
-- },
|
||||||
|
-- event = 'VeryLazy', -- Adjust this based on your needs
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- 'willothy/wezterm.nvim',
|
||||||
|
-- config = true,
|
||||||
|
-- event = 'BufWinEnter', -- Or another appropriate event
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- '3rd/image.nvim',
|
||||||
|
-- enabled = true,
|
||||||
|
-- commit = 'deb158d',
|
||||||
|
-- dev = false,
|
||||||
|
-- ft = { 'markdown', 'quarto', 'vimwiki' },
|
||||||
|
-- config = function()
|
||||||
|
-- local image = require 'image'
|
||||||
|
-- image.setup {
|
||||||
|
-- backend = 'wezterm',
|
||||||
|
-- integrations = {
|
||||||
|
-- markdown = {
|
||||||
|
-- enabled = true,
|
||||||
|
-- only_render_image_at_cursor = true,
|
||||||
|
-- filetypes = { 'markdown', 'vimwiki', 'quarto' },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- editor_only_render_when_focused = false,
|
||||||
|
-- window_overlap_clear_enabled = true,
|
||||||
|
-- tmux_show_only_in_active_window = true,
|
||||||
|
-- window_overlap_clear_ft_ignore = { 'cmp_menu', 'cmp_docs', 'scrollview', 'scrollview_sign' },
|
||||||
|
-- max_width = nil,
|
||||||
|
-- max_height = nil,
|
||||||
|
-- max_width_window_percentage = nil,
|
||||||
|
-- max_height_window_percentage = 30,
|
||||||
|
-- kitty_method = 'normal',
|
||||||
|
-- }
|
||||||
|
--
|
||||||
|
-- local function clear_all_images()
|
||||||
|
-- local bufnr = vim.api.nvim_get_current_buf()
|
||||||
|
-- local images = image.get_images { buffer = bufnr }
|
||||||
|
-- for _, img in ipairs(images) do
|
||||||
|
-- img:clear()
|
||||||
|
-- end
|
||||||
|
-- end
|
||||||
|
--
|
||||||
|
-- local function get_image_at_cursor(buf)
|
||||||
|
-- local images = image.get_images { buffer = buf }
|
||||||
|
-- local row = vim.api.nvim_win_get_cursor(0)[1] - 1
|
||||||
|
-- for _, img in ipairs(images) do
|
||||||
|
-- if img.geometry ~= nil and img.geometry.y == row then
|
||||||
|
-- local og_max_height = img.global_state.options.max_height_window_percentage
|
||||||
|
-- img.global_state.options.max_height_window_percentage = nil
|
||||||
|
-- return img, og_max_height
|
||||||
|
-- end
|
||||||
|
-- end
|
||||||
|
-- return nil
|
||||||
|
-- end
|
||||||
|
--
|
||||||
|
-- local create_preview_window = function(img, og_max_height)
|
||||||
|
-- local buf = vim.api.nvim_create_buf(false, true)
|
||||||
|
-- local win_width = vim.api.nvim_get_option_value('columns', {})
|
||||||
|
-- local win_height = vim.api.nvim_get_option_value('lines', {})
|
||||||
|
-- local win = vim.api.nvim_open_win(buf, true, {
|
||||||
|
-- relative = 'editor',
|
||||||
|
-- style = 'minimal',
|
||||||
|
-- width = win_width,
|
||||||
|
-- height = win_height,
|
||||||
|
-- row = 0,
|
||||||
|
-- col = 0,
|
||||||
|
-- zindex = 1000,
|
||||||
|
-- })
|
||||||
|
-- vim.keymap.set('n', 'q', function()
|
||||||
|
-- vim.api.nvim_win_close(win, true)
|
||||||
|
-- img.global_state.options.max_height_window_percentage = og_max_height
|
||||||
|
-- end, { buffer = buf })
|
||||||
|
-- return { buf = buf, win = win }
|
||||||
|
-- end
|
||||||
|
--
|
||||||
|
-- local handle_zoom = function(bufnr)
|
||||||
|
-- local img, og_max_height = get_image_at_cursor(bufnr)
|
||||||
|
-- if img == nil then
|
||||||
|
-- return
|
||||||
|
-- end
|
||||||
|
--
|
||||||
|
-- local preview = create_preview_window(img, og_max_height)
|
||||||
|
-- image.hijack_buffer(img.path, preview.win, preview.buf)
|
||||||
|
-- end
|
||||||
|
--
|
||||||
|
-- vim.keymap.set('n', '<leader>io', function()
|
||||||
|
-- local bufnr = vim.api.nvim_get_current_buf()
|
||||||
|
-- handle_zoom(bufnr)
|
||||||
|
-- end, { buffer = true, desc = 'image [o]pen' })
|
||||||
|
--
|
||||||
|
-- vim.keymap.set('n', '<leader>ic', clear_all_images, { desc = 'image [c]lear' })
|
||||||
|
-- end,
|
||||||
|
-- },
|
||||||
|
--
|
||||||
|
}
|
||||||
|
|
|
@ -6,14 +6,21 @@ return {
|
||||||
'BufNewFile',
|
'BufNewFile',
|
||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
|
-- Linter configurations based on file type
|
||||||
require('lint').linters_by_ft = {
|
require('lint').linters_by_ft = {
|
||||||
python = { 'ruff' },
|
python = { 'ruff' },
|
||||||
go = { 'golangcilint' },
|
go = { 'golangcilint' },
|
||||||
yaml = { 'yamllint' },
|
yaml = { 'yamllint' },
|
||||||
|
bash = { 'shellcheck' },
|
||||||
|
lua = { 'luacheck' }, -- Added Lua linter
|
||||||
|
rust = { 'clippy' }, -- Use `clippy` for Rust linting
|
||||||
|
dockerfile = { 'hadolint' }, -- Added Dockerfile linter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- Autocommand group for triggering linting
|
||||||
local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true })
|
local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true })
|
||||||
|
|
||||||
|
-- Trigger linting on buffer enter, write, and insert leave
|
||||||
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
|
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
|
||||||
group = lint_augroup,
|
group = lint_augroup,
|
||||||
callback = function()
|
callback = function()
|
||||||
|
@ -21,17 +28,23 @@ return {
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Keybinding to manually lint the current buffer
|
||||||
vim.keymap.set('n', '<leader>l', function()
|
vim.keymap.set('n', '<leader>l', function()
|
||||||
require('lint').try_lint()
|
require('lint').try_lint()
|
||||||
end, { desc = 'Lint the current buffer' })
|
end, { desc = 'Lint the current buffer' })
|
||||||
|
|
||||||
|
-- Mason tool installer setup
|
||||||
require('mason-tool-installer').setup({
|
require('mason-tool-installer').setup({
|
||||||
ensure_installed = {
|
ensure_installed = {
|
||||||
'ruff',
|
'ruff', -- Python
|
||||||
-- 'mypy',
|
-- 'mypy', -- Uncomment if needed for additional Python linting
|
||||||
'golangci-lint',
|
'golangci-lint', -- Go
|
||||||
'yamllint',
|
'yamllint', -- YAML
|
||||||
|
'shellcheck', -- Bash
|
||||||
|
'luacheck', -- Lua
|
||||||
|
'hadolint', -- Dockerfile
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
return {
|
return {
|
||||||
'neovim/nvim-lspconfig',
|
'neovim/nvim-lspconfig',
|
||||||
dependencies = {
|
dependencies = {
|
||||||
-- Automatically install LSPs to stdpath for neovim
|
|
||||||
{ 'williamboman/mason.nvim', config = true },
|
{ 'williamboman/mason.nvim', config = true },
|
||||||
'williamboman/mason-lspconfig.nvim',
|
'williamboman/mason-lspconfig.nvim',
|
||||||
'WhoIsSethDaniel/mason-tool-installer.nvim',
|
'WhoIsSethDaniel/mason-tool-installer.nvim',
|
||||||
|
@ -13,77 +12,35 @@ return {
|
||||||
opts = {},
|
opts = {},
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Additional lua configuration, makes nvim stuff amazing!
|
-- Additional Lua configuration
|
||||||
'folke/neodev.nvim',
|
'folke/neodev.nvim',
|
||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
local on_attach = function(client, bufnr)
|
-- General capabilities for LSP servers
|
||||||
local nmap = function(keys, func, desc)
|
|
||||||
if desc then
|
|
||||||
desc = 'LSP: ' .. desc
|
|
||||||
end
|
|
||||||
vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc })
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Key mappings for LSP features
|
|
||||||
nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
|
|
||||||
nmap('<leader>ca', function()
|
|
||||||
vim.lsp.buf.code_action(require('telescope.themes').get_dropdown({
|
|
||||||
winblend = 10,
|
|
||||||
previewer = false,
|
|
||||||
}))
|
|
||||||
end, '[C]ode [A]ction')
|
|
||||||
|
|
||||||
nmap('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
|
|
||||||
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
|
|
||||||
nmap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
|
|
||||||
nmap('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition')
|
|
||||||
nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
|
|
||||||
nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
|
|
||||||
|
|
||||||
nmap('K', vim.lsp.buf.hover, 'Hover Documentation')
|
|
||||||
nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation')
|
|
||||||
|
|
||||||
nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
|
|
||||||
nmap('gv', ':vsplit<CR>:lua vim.lsp.buf.declaration()<CR>', '[G]oto [V]irtual Text')
|
|
||||||
nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder')
|
|
||||||
nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder')
|
|
||||||
nmap('<leader>wl', function()
|
|
||||||
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
|
||||||
end, '[W]orkspace [L]ist Folders')
|
|
||||||
end
|
|
||||||
|
|
||||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
if pcall(require, 'cmp_nvim_lsp') then
|
local has_cmp, cmp_nvim_lsp = pcall(require, 'cmp_nvim_lsp')
|
||||||
capabilities = require('cmp_nvim_lsp').default_capabilities()
|
if has_cmp then
|
||||||
|
capabilities = cmp_nvim_lsp.default_capabilities()
|
||||||
end
|
end
|
||||||
|
|
||||||
require('neodev').setup({
|
-- LSP server configurations
|
||||||
library = {
|
|
||||||
plugins = { 'nvim-dap-ui' },
|
|
||||||
types = true,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
local servers = {
|
local servers = {
|
||||||
|
bashls = { filetypes = { 'sh', 'bash' } },
|
||||||
clangd = {},
|
clangd = {},
|
||||||
gopls = {
|
gopls = {
|
||||||
settings = {
|
settings = {
|
||||||
gopls = {
|
gopls = {
|
||||||
|
gofumpt = true,
|
||||||
|
staticcheck = true,
|
||||||
completeUnimported = true,
|
completeUnimported = true,
|
||||||
usePlaceholders = true,
|
usePlaceholders = true,
|
||||||
analysis = {
|
analyses = {
|
||||||
unusedParams = true,
|
unusedparams = true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
htmx = {
|
ruff_lsp = { filetypes = { 'python' } },
|
||||||
filetypes = { 'html' },
|
|
||||||
},
|
|
||||||
ruff_lsp = {
|
|
||||||
filetypes = { 'python' },
|
|
||||||
},
|
|
||||||
pyright = {
|
pyright = {
|
||||||
filetypes = { 'python' },
|
filetypes = { 'python' },
|
||||||
settings = {
|
settings = {
|
||||||
|
@ -97,102 +54,99 @@ return {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
rust_analyzer = {
|
rust_analyzer = { cmd = { 'rustup', 'run', 'stable', 'rust-analyzer' } },
|
||||||
cmd = { 'rustup', 'run', 'stable', 'rust-analyzer' },
|
texlab = {
|
||||||
|
flags = {
|
||||||
|
debounce_text_changes = 150,
|
||||||
|
},
|
||||||
|
settings = {
|
||||||
|
texlab = {
|
||||||
|
build = {
|
||||||
|
executable = "latexmk",
|
||||||
|
args = { "-pdf", "-xelatex", "-output-directory=output", "-interaction=nonstopmode", "-synctex=1", "%f" },
|
||||||
|
onSave = true,
|
||||||
|
},
|
||||||
|
forwardSearch = {
|
||||||
|
executable = "zathura",
|
||||||
|
args = { "--synctex-forward", "%l:1:%f", "%p" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
lua_ls = {
|
lua_ls = {
|
||||||
filetypes = { 'lua' },
|
filetypes = { 'lua' },
|
||||||
settings = {
|
settings = {
|
||||||
Lua = {
|
Lua = {
|
||||||
runtime = {
|
runtime = { version = 'LuaJIT', path = vim.split(package.path, ';') },
|
||||||
version = 'LuaJIT',
|
diagnostics = { globals = { 'vim' } },
|
||||||
path = vim.split(package.path, ';'),
|
|
||||||
},
|
|
||||||
diagnostics = {
|
|
||||||
globals = { 'vim' },
|
|
||||||
},
|
|
||||||
workspace = {
|
workspace = {
|
||||||
library = vim.api.nvim_get_runtime_file('', true),
|
library = vim.api.nvim_get_runtime_file('', true),
|
||||||
checkThirdParty = false,
|
checkThirdParty = false,
|
||||||
},
|
},
|
||||||
telemetry = {
|
telemetry = { enable = false },
|
||||||
enable = false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
ocamllsp = {
|
|
||||||
manual_install = true,
|
|
||||||
filetypes = { 'ocaml', 'ocaml.interface', 'ocaml.cram', 'ocaml.menhir' },
|
|
||||||
settings = {
|
|
||||||
codelens = { enabled = true },
|
|
||||||
inlayHints = { enable = true },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
yamlls = {
|
yamlls = {
|
||||||
filetypes = { 'yaml' },
|
filetypes = { 'yaml' },
|
||||||
settings = {
|
settings = {
|
||||||
yaml = {
|
yaml = {
|
||||||
schemas = {
|
schemas = {
|
||||||
['https://json.schemasstore.org/github-workflow.json'] = '/.github/workflows/*.{yml,yaml}',
|
['https://json.schemastore.org/github-workflow.json'] = '/.github/workflows/*.{yml,yaml}',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
taplo = {
|
taplo = { filetypes = { 'toml' } },
|
||||||
filetypes = { 'toml' },
|
dockerls = { filetypes = { 'Dockerfile' } },
|
||||||
},
|
|
||||||
dockerls = {
|
|
||||||
filetypes = { 'Dockerfile' },
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local ensure_installed = vim.tbl_filter(function(key)
|
-- Setup LSP servers via mason-lspconfig
|
||||||
local t = servers[key]
|
require('mason-lspconfig').setup({
|
||||||
if type(t) == 'table' then
|
ensure_installed = vim.tbl_keys(servers),
|
||||||
return not t.manual_install
|
handlers = {
|
||||||
else
|
function(server_name)
|
||||||
return t
|
require('lspconfig')[server_name].setup({
|
||||||
end
|
capabilities = capabilities,
|
||||||
end, vim.tbl_keys(servers))
|
})
|
||||||
|
end,
|
||||||
require('mason').setup({
|
|
||||||
ui = {
|
|
||||||
icons = {
|
|
||||||
package_installed = '✓',
|
|
||||||
package_pending = '➜',
|
|
||||||
package_uninstalled = '✗',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
local mason_lspconfig = require('mason-lspconfig')
|
-- Setup specific LSP servers with custom configuration
|
||||||
mason_lspconfig.setup({
|
for server, config in pairs(servers) do
|
||||||
ensure_installed = ensure_installed,
|
require('lspconfig')[server].setup(vim.tbl_extend('force', {
|
||||||
})
|
capabilities = capabilities,
|
||||||
|
on_attach = function(client, bufnr)
|
||||||
|
local function nmap(keys, func, desc)
|
||||||
|
if desc then
|
||||||
|
desc = 'LSP: ' .. desc
|
||||||
|
end
|
||||||
|
vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc })
|
||||||
|
end
|
||||||
|
|
||||||
for name, config in pairs(servers) do
|
nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
|
||||||
if config then
|
nmap('<leader>ca', function()
|
||||||
require('lspconfig')[name].setup({
|
vim.lsp.buf.code_action(require('telescope.themes').get_dropdown({
|
||||||
capabilities = capabilities,
|
winblend = 10,
|
||||||
on_attach = on_attach,
|
previewer = false,
|
||||||
settings = config.settings,
|
}))
|
||||||
filetypes = config.filetypes,
|
end, '[C]ode [A]ction')
|
||||||
cmd = config.cmd,
|
|
||||||
})
|
nmap('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
|
||||||
end
|
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
|
||||||
end
|
nmap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
|
||||||
|
nmap('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition')
|
||||||
require('cmp')
|
nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
|
||||||
|
nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
|
||||||
local sign = function(opts)
|
|
||||||
vim.fn.sign_define(opts.name, {
|
nmap('K', vim.lsp.buf.hover, 'Hover Documentation')
|
||||||
texthl = opts.name,
|
nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation')
|
||||||
text = opts.text,
|
end,
|
||||||
numhl = '',
|
}, config))
|
||||||
})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Diagnostics configuration
|
||||||
vim.diagnostic.config({
|
vim.diagnostic.config({
|
||||||
underline = true,
|
underline = true,
|
||||||
severity_sort = true,
|
severity_sort = true,
|
||||||
|
@ -202,19 +156,34 @@ return {
|
||||||
spacing = 2,
|
spacing = 2,
|
||||||
},
|
},
|
||||||
float = {
|
float = {
|
||||||
source = 'if_many',
|
Source = 'if_many',
|
||||||
border = 'rounded',
|
border = 'rounded',
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local sign = function(opts)
|
||||||
|
vim.fn.sign_define(opts.name, {
|
||||||
|
texthl = opts.name,
|
||||||
|
text = opts.text,
|
||||||
|
numhl = '',
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
sign({ name = 'DiagnosticSignError', text = '✘' })
|
sign({ name = 'DiagnosticSignError', text = '✘' })
|
||||||
sign({ name = 'DiagnosticSignWarn', text = '▲' })
|
sign({ name = 'DiagnosticSignWarn', text = '▲' })
|
||||||
sign({ name = 'DiagnosticSignHint', text = '⚑' })
|
sign({ name = 'DiagnosticSignHint', text = '⚑' })
|
||||||
sign({ name = 'DiagnosticSignInfo', text = '»' })
|
sign({ name = 'DiagnosticSignInfo', text = '»' })
|
||||||
|
|
||||||
vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(vim.lsp.handlers.hover, { border = 'rounded' })
|
-- Fidget configuration (LSP progress)
|
||||||
vim.lsp.handlers['textDocument/signatureHelp'] =
|
require('fidget').setup({})
|
||||||
vim.lsp.with(vim.lsp.handlers.signature_help, { border = 'rounded' })
|
|
||||||
|
-- Neodev setup for improved Lua development
|
||||||
|
require('neodev').setup({
|
||||||
|
library = {
|
||||||
|
plugins = { 'nvim-dap-ui' },
|
||||||
|
types = true,
|
||||||
|
},
|
||||||
|
})
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
return {
|
||||||
|
'iamcco/markdown-preview.nvim',
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
return {
|
||||||
|
-- -- Quarto support for data science
|
||||||
|
-- {
|
||||||
|
-- 'quarto-dev/quarto-nvim',
|
||||||
|
-- ft = { 'quarto' },
|
||||||
|
-- opts = {
|
||||||
|
-- codeRunner = {
|
||||||
|
-- enabled = true,
|
||||||
|
-- default_method = "molten",
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- dependencies = {
|
||||||
|
-- 'jmbuhr/otter.nvim', -- For language features in code cells
|
||||||
|
-- 'nvim-treesitter/nvim-treesitter', -- Syntax highlighting and code understanding
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
--
|
||||||
|
-- -- Jupytext integration for working with Jupyter notebooks
|
||||||
|
-- {
|
||||||
|
-- 'GCBallesteros/jupytext.nvim',
|
||||||
|
-- opts = {
|
||||||
|
-- custom_language_formatting = {
|
||||||
|
-- python = { extension = 'qmd', style = 'quarto', force_ft = 'quarto' },
|
||||||
|
-- r = { extension = 'qmd', style = 'quarto', force_ft = 'quarto' },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
--
|
||||||
|
-- -- Image management and clipboard integration
|
||||||
|
-- {
|
||||||
|
-- 'HakonHarnes/img-clip.nvim',
|
||||||
|
-- event = 'BufEnter',
|
||||||
|
-- ft = { 'markdown', 'quarto', 'latex' },
|
||||||
|
-- opts = {
|
||||||
|
-- default = { dir_path = 'img' },
|
||||||
|
-- filetypes = {
|
||||||
|
-- markdown = { url_encode_path = true, template = '' },
|
||||||
|
-- quarto = { url_encode_path = true, template = '' },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- config = function(_, opts)
|
||||||
|
-- require('img-clip').setup(opts)
|
||||||
|
-- vim.keymap.set('n', '<leader>ii', ':PasteImage<cr>', { desc = 'Insert image from clipboard' })
|
||||||
|
-- end,
|
||||||
|
-- },
|
||||||
|
--
|
||||||
|
-- -- Equation preview in markdown/quarto files
|
||||||
|
-- {
|
||||||
|
-- 'jbyuki/nabla.nvim',
|
||||||
|
-- keys = {
|
||||||
|
-- { '<leader>qm', ':lua require"nabla".toggle_virt()<cr>', { desc = 'Toggle math equations' } },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
--
|
||||||
|
-- -- Molten for interactive code execution
|
||||||
|
-- {
|
||||||
|
-- 'benlubas/molten-nvim',
|
||||||
|
-- enabled = true,
|
||||||
|
-- build = ':UpdateRemotePlugins',
|
||||||
|
-- init = function()
|
||||||
|
-- vim.g.molten_image_provider = 'image.nvim'
|
||||||
|
-- vim.g.molten_output_win_max_height = 20
|
||||||
|
-- vim.g.molten_auto_open_output = false
|
||||||
|
-- end,
|
||||||
|
-- keys = {
|
||||||
|
-- { 'n', '<leader>mi', ':MoltenInit<cr>', { desc = 'Molten init' } },
|
||||||
|
-- { 'v', '<leader>mv', ':<C-u>MoltenEvaluateVisual<cr>', { desc = 'Evaluate visual selection' } },
|
||||||
|
-- { 'n', '<leader>mr', ':MoltenReevaluateCell<cr>', { desc = 'Re-evaluate cell' } },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
}
|
||||||
|
|
|
@ -5,17 +5,17 @@ return {
|
||||||
'nvim-treesitter/nvim-treesitter',
|
'nvim-treesitter/nvim-treesitter',
|
||||||
},
|
},
|
||||||
keys = {
|
keys = {
|
||||||
{ '<leader>ef', ":lua require('refactoring').refactor('Extract Function')<CR>", mode = 'x', desc = 'Extract Function' },
|
{ '<leader>ef', ":lua require('refactoring').refactor('Extract Function')<CR>", mode = 'x', desc = 'Extract Function' },
|
||||||
{ '<leader>eff', ":lua require('refactoring').refactor('Extract Function To File')<CR>", mode = 'x', desc = 'Extract Function To File' },
|
{ '<leader>eff', ":lua require('refactoring').refactor('Extract Function To File')<CR>", mode = 'x', desc = 'Extract Function To File' },
|
||||||
{ '<leader>ev', ":lua require('refactoring').refactor('Extract Variable')<CR>", mode = 'x', desc = 'Extract Variable' },
|
{ '<leader>ev', ":lua require('refactoring').refactor('Extract Variable')<CR>", mode = 'x', desc = 'Extract Variable' },
|
||||||
{ '<leader>eI', ":lua require('refactoring').refactor('Inline Function')<CR>", mode = 'n', desc = 'Inline Function' },
|
{ '<leader>eI', ":lua require('refactoring').refactor('Inline Function')<CR>", mode = 'n', desc = 'Inline Function' },
|
||||||
{ '<leader>ei', ":lua require('refactoring').refactor('Inline Variable')<CR>", mode = { 'n', 'x' }, desc = 'Inline Variable' },
|
{ '<leader>ei', ":lua require('refactoring').refactor('Inline Variable')<CR>", mode = { 'n', 'x' }, desc = 'Inline Variable' },
|
||||||
{ '<leader>eb', ":lua require('refactoring').refactor('Extract Block')<CR>", mode = 'n', desc = 'Extract Block' },
|
{ '<leader>eb', ":lua require('refactoring').refactor('Extract Block')<CR>", mode = 'n', desc = 'Extract Block' },
|
||||||
{ '<leader>ebf', ":lua require('refactoring').refactor('Extract Block To File')<CR>", mode = 'n', desc = 'Extract Block To File' },
|
{ '<leader>ebf', ":lua require('refactoring').refactor('Extract Block To File')<CR>", mode = 'n', desc = 'Extract Block To File' },
|
||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
require('refactoring').setup({
|
require('refactoring').setup({
|
||||||
show_success_message = false,
|
show_success_message = true,
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ return {
|
||||||
dependencies = {
|
dependencies = {
|
||||||
'nvim-treesitter/nvim-treesitter-textobjects',
|
'nvim-treesitter/nvim-treesitter-textobjects',
|
||||||
'https://github.com/apple/pkl-neovim.git',
|
'https://github.com/apple/pkl-neovim.git',
|
||||||
'windwp/nvim-ts-autotag',
|
|
||||||
},
|
},
|
||||||
build = ':TSUpdate',
|
build = ':TSUpdate',
|
||||||
config = function()
|
config = function()
|
||||||
|
@ -12,7 +11,8 @@ return {
|
||||||
local ts = require('nvim-treesitter.configs')
|
local ts = require('nvim-treesitter.configs')
|
||||||
ts.setup({
|
ts.setup({
|
||||||
ensure_installed = {
|
ensure_installed = {
|
||||||
'c', 'cpp', 'lua', 'python', 'go', 'rust', 'vimdoc', 'vim'
|
'bash', 'c', 'cpp', 'lua', 'python', 'go', 'markdown', 'markdown_inline', 'r', 'rust', 'vimdoc', 'vim', 'yaml',
|
||||||
|
'query'
|
||||||
},
|
},
|
||||||
ignore_install = { '' },
|
ignore_install = { '' },
|
||||||
highlight = {
|
highlight = {
|
||||||
|
@ -23,10 +23,10 @@ return {
|
||||||
incremental_selection = {
|
incremental_selection = {
|
||||||
enable = true,
|
enable = true,
|
||||||
keymaps = {
|
keymaps = {
|
||||||
init_selection = '<c-space>',
|
init_selection = 'gnn',
|
||||||
node_incremental = '<c-space>',
|
node_incremental = 'grn',
|
||||||
scope_incremental = '<c-s>',
|
scope_incremental = 'grc',
|
||||||
node_decremental = '<M-space>',
|
node_decremental = 'grm',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
textobjects = {
|
textobjects = {
|
||||||
|
@ -73,16 +73,6 @@ return {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
-- Autotag setup
|
|
||||||
require('nvim-ts-autotag').setup({
|
|
||||||
enable = true,
|
|
||||||
})
|
|
||||||
end,
|
end,
|
||||||
opts = {
|
|
||||||
autotag = {
|
|
||||||
enable = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,11 @@ return {
|
||||||
'folke/trouble.nvim',
|
'folke/trouble.nvim',
|
||||||
cmd = "Trouble",
|
cmd = "Trouble",
|
||||||
opts = {
|
opts = {
|
||||||
auto_open = false,
|
auto_open = false,
|
||||||
auto_close = true,
|
auto_close = true,
|
||||||
auto_preview = true,
|
auto_preview = true,
|
||||||
auto_fold = true,
|
auto_fold = true,
|
||||||
use_diagnostic_signs = true,
|
use_diagnostic_signs = true,
|
||||||
},
|
},
|
||||||
keys = {
|
keys = {
|
||||||
{ "<leader>tt", "<cmd>Trouble diagnostics toggle<cr>", desc = "Diagnostics (Trouble)" },
|
{ "<leader>tt", "<cmd>Trouble diagnostics toggle<cr>", desc = "Diagnostics (Trouble)" },
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
; (atx_heading
|
||||||
|
; heading_content: (_) @class.inner) @class.outer
|
||||||
|
;
|
||||||
|
; (setext_heading
|
||||||
|
; heading_content: (_) @class.inner) @class.outer
|
||||||
|
;
|
||||||
|
; (thematic_break) @class.outer
|
||||||
|
|
||||||
|
(fenced_code_block (code_fence_content) @block.inner) @block.outer
|
||||||
|
|
||||||
|
[
|
||||||
|
(paragraph)
|
||||||
|
(list)
|
||||||
|
] @block.outer
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
; block
|
||||||
|
; call
|
||||||
|
(call) @call.outer
|
||||||
|
|
||||||
|
(arguments) @call.inner
|
||||||
|
|
||||||
|
; class
|
||||||
|
; comment
|
||||||
|
(comment) @comment.outer
|
||||||
|
|
||||||
|
; conditional
|
||||||
|
(if_statement
|
||||||
|
condition: (_)? @conditional.inner) @conditional.outer
|
||||||
|
|
||||||
|
; function
|
||||||
|
[
|
||||||
|
(function_definition)
|
||||||
|
] @function.outer
|
||||||
|
|
||||||
|
(function_definition
|
||||||
|
[
|
||||||
|
(call)
|
||||||
|
(binary_operator)
|
||||||
|
] @function.inner) @function.outer
|
||||||
|
|
||||||
|
|
||||||
|
; loop
|
||||||
|
[
|
||||||
|
(while_statement)
|
||||||
|
(for_statement)
|
||||||
|
(repeat_statement)
|
||||||
|
] @loop.outer
|
||||||
|
|
||||||
|
(while_statement
|
||||||
|
body: (_) @loop.inner)
|
||||||
|
|
||||||
|
(repeat_statement
|
||||||
|
body: (_) @loop.inner)
|
||||||
|
|
||||||
|
(for_statement
|
||||||
|
body: (_) @loop.inner)
|
||||||
|
|
||||||
|
; statement
|
||||||
|
|
||||||
|
(program
|
||||||
|
(_) @statement.outer)
|
||||||
|
|
||||||
|
; number
|
||||||
|
(float) @number.inner
|
||||||
|
|
Loading…
Reference in New Issue