From 18a4f63b85170adc602821817a9c80eeea16617f Mon Sep 17 00:00:00 2001 From: philw Date: Thu, 10 Apr 2025 15:17:48 +0200 Subject: feature: Implement keybindings related to lsp\n\n- Jump to definition is allowed by pressing leader+d\n- Custom code actions can be invoked with leader+ca\n- Additionally, the LSP server setup was refactored --- init.lua | 170 ++++++++++++++++++++++++++++----------------------------------- 1 file changed, 75 insertions(+), 95 deletions(-) (limited to 'init.lua') diff --git a/init.lua b/init.lua index 43b7373..e55e1dd 100644 --- a/init.lua +++ b/init.lua @@ -1,55 +1,49 @@ --@diagnostic disable: undefined-global, -local option = vim.opt --- local vim.keymap = vim.vim.keymap -local api = vim.api -local fn = vim.fn - vim.loader.enable() vim.g.netrw_banner = 0 vim.g.netrw_liststyle = 3 vim.g.netrw_altv = 0 vim.g.netrw_winsize = 25 -vim.g.netrw_browse_split = 0 +vim.g.netrw_browse_split = 4 vim.g.rustfmt_autosave = 1 vim.g.mkdp_auto_start = 1 vim.g.gitgutter_set_sign_backgrounds = 1 -option.nu = true -option.tabstop = 2 -option.softtabstop = 2 -option.shiftwidth = 2 -option.expandtab = true -option.smartindent = true -option.ruler = false -option.wrap = false -option.swapfile = false -option.hlsearch = true -option.incsearch = true -option.updatetime = 50 -option.laststatus = 0 -option.signcolumn = "number" -option.autoindent = true -option.clipboard = "unnamedplus" -option.termguicolors = true -option.fillchars = "eob: " -option.autoindent = true -option.lazyredraw = false -option.updatetime = 300 -option.timeoutlen = 500 +vim.opt.nu = true +vim.opt.tabstop = 4 +vim.opt.softtabstop = 4 +vim.opt.shiftwidth = 4 +vim.opt.expandtab = true +vim.opt.smartindent = true +vim.opt.ruler = false +vim.opt.wrap = false +vim.opt.swapfile = false +vim.opt.hlsearch = true +vim.opt.incsearch = true +vim.opt.updatetime = 50 +vim.opt.laststatus = 0 +vim.opt.signcolumn = "number" +vim.opt.clipboard = "unnamedplus" +vim.opt.termguicolors = true +vim.opt.fillchars = "eob: " +vim.opt.autoindent = true +vim.opt.lazyredraw = false +vim.opt.updatetime = 300 +vim.opt.timeoutlen = 500 -- Format on save -api.nvim_create_autocmd( +vim.api.nvim_create_autocmd( "BufWritePre", { callback = function() - vim.lsp.buf.format() + vim.lsp.buf.format({silent = true}) end } ) -api.nvim_create_augroup("RunPfOnSave", {clear = true}) -api.nvim_create_autocmd( +vim.api.nvim_create_augroup("RunPfOnSave", {clear = true}) +vim.api.nvim_create_autocmd( "BufWritePost", { group = "RunPfOnSave", @@ -57,7 +51,7 @@ api.nvim_create_autocmd( command = "silent! !prettier --write %" } ) -api.nvim_create_autocmd( +vim.api.nvim_create_autocmd( "BufWritePost", { group = "RunPfOnSave", @@ -67,8 +61,8 @@ api.nvim_create_autocmd( ) -- Auto-delete Netrw hidden buffers -api.nvim_create_augroup("AutoDeleteNetrwHiddenBuffers", {clear = true}) -api.nvim_create_autocmd( +vim.api.nvim_create_augroup("AutoDeleteNetrwHiddenBuffers", {clear = true}) +vim.api.nvim_create_autocmd( "FileType", { group = "AutoDeleteNetrwHiddenBuffers", @@ -83,23 +77,28 @@ api.nvim_create_autocmd( -- Toggle VExplorer function ToggleVExplorer() if vim.t.expl_buf_num then - local expl_win_num = fn.bufwinnr(vim.t.expl_buf_num) + local expl_win_num = vim.fn.bufwinnr(vim.t.expl_buf_num) if expl_win_num ~= -1 then - local cur_win_id = fn.win_getid() - vim.cmd(expl_win_num .. "windo close") - local prev_win_num = fn.win_id2win(cur_win_id) - if prev_win_num ~= 0 then - vim.cmd(prev_win_num .. "wincmd w") + if vim.fn.winnr('$') > 1 then + local cur_win_id = vim.fn.win_getid() + vim.cmd(expl_win_num .. "windo close") + local prev_win_num = vim.fn.win_id2win(cur_win_id) + if prev_win_num ~= 0 then + vim.cmd(prev_win_num .. "wincmd w") + end + else + vim.cmd("enew") end end vim.t.expl_buf_num = nil else - vim.cmd("1wincmd w") - vim.cmd("Vexplore") - vim.t.expl_buf_num = fn.bufnr("%") + -- otwórz pionowy split z lewej i przejdź do netrw + vim.cmd("topleft " .. vim.g.netrw_winsize .. "vsplit") + vim.cmd("Explore") + vim.t.expl_buf_num = vim.fn.bufnr("%") + vim.cmd("wincmd h") -- PRZEJDŹ DO NETRW end end - local function setup_autopairs() local autopairs = { ["("] = ")", @@ -152,6 +151,8 @@ function set_highlights() end end +vim.cmd("colorscheme retrobox") + vim.o.background = "dark" function color_mode() if vim.o.background == "dark" then @@ -216,42 +217,25 @@ vim.api.nvim_create_autocmd( } ) -local lsp_servers = {} -require("lspconfig").clangd.setup( - { - filetypes = {"c", "cpp", "objc", "objcpp"} - } -) -require("lspconfig").svelte.setup( - { - filetypes = {"svelte"} - } -) -require("lspconfig").ts_ls.setup( - { - filetypes = {"typescript", "typescriptreact", "javascript", "javascriptreact"} - } -) -require("lspconfig").rust_analyzer.setup( - { - filetypes = {"rust"} - } -) +local lsp_servers = { + clangd = { filetypes = {"c", "cpp", "objc", "objcpp"} }, + svelte = { filetypes = {"svelte"} }, + ts_ls = { filetypes = {"typescript", "typescriptreact", "javascript", "javascriptreact"} }, + rust_analyzer = { filetypes = {"rust"} } +} local server_maps = function(opts) end -for lsp, settings in pairs(lsp_servers) do +for lsp, settings in pairs(lsp_servers) do require("lspconfig")[lsp].setup( - coq.lsp_ensure_capabilities( - { - on_attach = function(_, buffer) - server_maps({buffer = buffer}) - end, - settings = settings - } - ) + coq.lsp_ensure_capabilities({ + on_attach = function(_, buffer) + server_maps({buffer = buffer}) + end, + settings = settings + }) ) end @@ -259,6 +243,7 @@ set_highlights() vim.g.mapleader = " " + vim.keymap.set("n", "e", ToggleVExplorer, {desc = "Toggle VExplorer"}) vim.keymap.set("n", "z", [[:%s/\<\>//gI]]) vim.keymap.set("n", "a", "ggVG") @@ -266,32 +251,27 @@ vim.keymap.set("n", "y", "cc") vim.keymap.set("n", "", "yy") vim.keymap.set("n", "", "p") vim.keymap.set("n", "", "u") -vim.keymap.set("v", "J", ":m '>+1gv=gv") vim.keymap.set("n", "j", "5j") vim.keymap.set("n", "k", "5k") -vim.keymap.set("v", "K", ":m '<-2gv=gv") vim.keymap.set("n", "f", "FzfLua files") vim.keymap.set("n", "F", "FzfLua live_grep", {noremap = true, silent = true}) vim.keymap.set("n", "b", "FzfLua buffers") vim.keymap.set("n", "d", vim.lsp.buf.definition, opts) +vim.keymap.set("n", "df", function() vim.diagnostic.open_float() end, opts) vim.keymap.set("n", "k", vim.lsp.buf.hover, opts) +vim.keymap.set("n", "ca", function() vim.lsp.buf.code_action() end, opts) vim.keymap.set("n", "r", color_mode, {desc = "Change mode light/dark"}) -vim.keymap.set( - "n", - "t", - function() - vim.cmd("terminal") - vim.cmd("startinsert") - end, - {desc = "Open terminal in current window"} -) +vim.keymap.set("n", "t", function() + vim.cmd("terminal") + vim.cmd("startinsert") +end, {desc = "Open terminal in current window"}) -vim.keymap.set( - "t", - "", - function() - vim.cmd([[stopinsert]]) - vim.cmd([[b#]]) - end, - {noremap = true, silent = true} -) +-- Visual mode mappings +vim.keymap.set("v", "J", ":m '>+1gv=gv") +vim.keymap.set("v", "K", ":m '<-2gv=gv") + +-- Terminal mode mapping +vim.keymap.set("t", "", function() + vim.cmd([[stopinsert]]) + vim.cmd([[b#]]) +end, {noremap = true, silent = true}) -- cgit v1.2.3