aboutsummaryrefslogtreecommitdiffstats
path: root/init.lua
diff options
context:
space:
mode:
authorphilw <dscr@duck.com>2025-04-10 15:17:48 +0200
committerphilw <dscr@duck.com>2025-04-10 15:17:48 +0200
commit18a4f63b85170adc602821817a9c80eeea16617f (patch)
tree7c3d415be87318fcc6b73db6df956f50ecd59748 /init.lua
parent4136551996e9233ef410c682afcd48c99af551b6 (diff)
downloadneovim-18a4f63b85170adc602821817a9c80eeea16617f.tar.gz
neovim-18a4f63b85170adc602821817a9c80eeea16617f.zip
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
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua170
1 files changed, 75 insertions, 95 deletions
diff --git a/init.lua b/init.lua
index 43b7373..e55e1dd 100644
--- a/init.lua
+++ b/init.lua
@@ -1,55 +1,49 @@
1--@diagnostic disable: undefined-global, 1--@diagnostic disable: undefined-global,
2local option = vim.opt
3-- local vim.keymap = vim.vim.keymap
4local api = vim.api
5local fn = vim.fn
6
7vim.loader.enable() 2vim.loader.enable()
8 3
9vim.g.netrw_banner = 0 4vim.g.netrw_banner = 0
10vim.g.netrw_liststyle = 3 5vim.g.netrw_liststyle = 3
11vim.g.netrw_altv = 0 6vim.g.netrw_altv = 0
12vim.g.netrw_winsize = 25 7vim.g.netrw_winsize = 25
13vim.g.netrw_browse_split = 0 8vim.g.netrw_browse_split = 4
14vim.g.rustfmt_autosave = 1 9vim.g.rustfmt_autosave = 1
15vim.g.mkdp_auto_start = 1 10vim.g.mkdp_auto_start = 1
16vim.g.gitgutter_set_sign_backgrounds = 1 11vim.g.gitgutter_set_sign_backgrounds = 1
17 12
18option.nu = true 13vim.opt.nu = true
19option.tabstop = 2 14vim.opt.tabstop = 4
20option.softtabstop = 2 15vim.opt.softtabstop = 4
21option.shiftwidth = 2 16vim.opt.shiftwidth = 4
22option.expandtab = true 17vim.opt.expandtab = true
23option.smartindent = true 18vim.opt.smartindent = true
24option.ruler = false 19vim.opt.ruler = false
25option.wrap = false 20vim.opt.wrap = false
26option.swapfile = false 21vim.opt.swapfile = false
27option.hlsearch = true 22vim.opt.hlsearch = true
28option.incsearch = true 23vim.opt.incsearch = true
29option.updatetime = 50 24vim.opt.updatetime = 50
30option.laststatus = 0 25vim.opt.laststatus = 0
31option.signcolumn = "number" 26vim.opt.signcolumn = "number"
32option.autoindent = true 27vim.opt.clipboard = "unnamedplus"
33option.clipboard = "unnamedplus" 28vim.opt.termguicolors = true
34option.termguicolors = true 29vim.opt.fillchars = "eob: "
35option.fillchars = "eob: " 30vim.opt.autoindent = true
36option.autoindent = true 31vim.opt.lazyredraw = false
37option.lazyredraw = false 32vim.opt.updatetime = 300
38option.updatetime = 300 33vim.opt.timeoutlen = 500
39option.timeoutlen = 500
40 34
41-- Format on save 35-- Format on save
42api.nvim_create_autocmd( 36vim.api.nvim_create_autocmd(
43 "BufWritePre", 37 "BufWritePre",
44 { 38 {
45 callback = function() 39 callback = function()
46 vim.lsp.buf.format() 40 vim.lsp.buf.format({silent = true})
47 end 41 end
48 } 42 }
49) 43)
50 44
51api.nvim_create_augroup("RunPfOnSave", {clear = true}) 45vim.api.nvim_create_augroup("RunPfOnSave", {clear = true})
52api.nvim_create_autocmd( 46vim.api.nvim_create_autocmd(
53 "BufWritePost", 47 "BufWritePost",
54 { 48 {
55 group = "RunPfOnSave", 49 group = "RunPfOnSave",
@@ -57,7 +51,7 @@ api.nvim_create_autocmd(
57 command = "silent! !prettier --write %" 51 command = "silent! !prettier --write %"
58 } 52 }
59) 53)
60api.nvim_create_autocmd( 54vim.api.nvim_create_autocmd(
61 "BufWritePost", 55 "BufWritePost",
62 { 56 {
63 group = "RunPfOnSave", 57 group = "RunPfOnSave",
@@ -67,8 +61,8 @@ api.nvim_create_autocmd(
67) 61)
68 62
69-- Auto-delete Netrw hidden buffers 63-- Auto-delete Netrw hidden buffers
70api.nvim_create_augroup("AutoDeleteNetrwHiddenBuffers", {clear = true}) 64vim.api.nvim_create_augroup("AutoDeleteNetrwHiddenBuffers", {clear = true})
71api.nvim_create_autocmd( 65vim.api.nvim_create_autocmd(
72 "FileType", 66 "FileType",
73 { 67 {
74 group = "AutoDeleteNetrwHiddenBuffers", 68 group = "AutoDeleteNetrwHiddenBuffers",
@@ -83,23 +77,28 @@ api.nvim_create_autocmd(
83-- Toggle VExplorer 77-- Toggle VExplorer
84function ToggleVExplorer() 78function ToggleVExplorer()
85 if vim.t.expl_buf_num then 79 if vim.t.expl_buf_num then
86 local expl_win_num = fn.bufwinnr(vim.t.expl_buf_num) 80 local expl_win_num = vim.fn.bufwinnr(vim.t.expl_buf_num)
87 if expl_win_num ~= -1 then 81 if expl_win_num ~= -1 then
88 local cur_win_id = fn.win_getid() 82 if vim.fn.winnr('$') > 1 then
89 vim.cmd(expl_win_num .. "windo close") 83 local cur_win_id = vim.fn.win_getid()
90 local prev_win_num = fn.win_id2win(cur_win_id) 84 vim.cmd(expl_win_num .. "windo close")
91 if prev_win_num ~= 0 then 85 local prev_win_num = vim.fn.win_id2win(cur_win_id)
92 vim.cmd(prev_win_num .. "wincmd w") 86 if prev_win_num ~= 0 then
87 vim.cmd(prev_win_num .. "wincmd w")
88 end
89 else
90 vim.cmd("enew")
93 end 91 end
94 end 92 end
95 vim.t.expl_buf_num = nil 93 vim.t.expl_buf_num = nil
96 else 94 else
97 vim.cmd("1wincmd w") 95 -- otwórz pionowy split z lewej i przejdź do netrw
98 vim.cmd("Vexplore") 96 vim.cmd("topleft " .. vim.g.netrw_winsize .. "vsplit")
99 vim.t.expl_buf_num = fn.bufnr("%") 97 vim.cmd("Explore")
98 vim.t.expl_buf_num = vim.fn.bufnr("%")
99 vim.cmd("wincmd h") -- PRZEJDŹ DO NETRW
100 end 100 end
101end 101end
102
103local function setup_autopairs() 102local function setup_autopairs()
104 local autopairs = { 103 local autopairs = {
105 ["("] = ")", 104 ["("] = ")",
@@ -152,6 +151,8 @@ function set_highlights()
152 end 151 end
153end 152end
154 153
154vim.cmd("colorscheme retrobox")
155
155vim.o.background = "dark" 156vim.o.background = "dark"
156function color_mode() 157function color_mode()
157 if vim.o.background == "dark" then 158 if vim.o.background == "dark" then
@@ -216,42 +217,25 @@ vim.api.nvim_create_autocmd(
216 } 217 }
217) 218)
218 219
219local lsp_servers = {}
220 220
221require("lspconfig").clangd.setup( 221local lsp_servers = {
222 { 222 clangd = { filetypes = {"c", "cpp", "objc", "objcpp"} },
223 filetypes = {"c", "cpp", "objc", "objcpp"} 223 svelte = { filetypes = {"svelte"} },
224 } 224 ts_ls = { filetypes = {"typescript", "typescriptreact", "javascript", "javascriptreact"} },
225) 225 rust_analyzer = { filetypes = {"rust"} }
226require("lspconfig").svelte.setup( 226}
227 {
228 filetypes = {"svelte"}
229 }
230)
231require("lspconfig").ts_ls.setup(
232 {
233 filetypes = {"typescript", "typescriptreact", "javascript", "javascriptreact"}
234 }
235)
236require("lspconfig").rust_analyzer.setup(
237 {
238 filetypes = {"rust"}
239 }
240)
241 227
242local server_maps = function(opts) 228local server_maps = function(opts)
243end 229end
244 230
245for lsp, settings in pairs(lsp_servers) do 231for lsp, settings in pairs(lsp_servers) do
246 require("lspconfig")[lsp].setup( 232 require("lspconfig")[lsp].setup(
247 coq.lsp_ensure_capabilities( 233 coq.lsp_ensure_capabilities({
248 { 234 on_attach = function(_, buffer)
249 on_attach = function(_, buffer) 235 server_maps({buffer = buffer})
250 server_maps({buffer = buffer}) 236 end,
251 end, 237 settings = settings
252 settings = settings 238 })
253 }
254 )
255 ) 239 )
256end 240end
257 241
@@ -259,6 +243,7 @@ set_highlights()
259 243
260vim.g.mapleader = " " 244vim.g.mapleader = " "
261 245
246
262vim.keymap.set("n", "<leader>e", ToggleVExplorer, {desc = "Toggle VExplorer"}) 247vim.keymap.set("n", "<leader>e", ToggleVExplorer, {desc = "Toggle VExplorer"})
263vim.keymap.set("n", "<leader>z", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]]) 248vim.keymap.set("n", "<leader>z", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]])
264vim.keymap.set("n", "<leader>a", "ggVG") 249vim.keymap.set("n", "<leader>a", "ggVG")
@@ -266,32 +251,27 @@ vim.keymap.set("n", "<leader>y", "cc")
266vim.keymap.set("n", "<C-c>", "yy") 251vim.keymap.set("n", "<C-c>", "yy")
267vim.keymap.set("n", "<C-v>", "p") 252vim.keymap.set("n", "<C-v>", "p")
268vim.keymap.set("n", "<C-z>", "u") 253vim.keymap.set("n", "<C-z>", "u")
269vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
270vim.keymap.set("n", "j", "5j") 254vim.keymap.set("n", "j", "5j")
271vim.keymap.set("n", "k", "5k") 255vim.keymap.set("n", "k", "5k")
272vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
273vim.keymap.set("n", "<leader>f", "<cmd>FzfLua files<cr>") 256vim.keymap.set("n", "<leader>f", "<cmd>FzfLua files<cr>")
274vim.keymap.set("n", "<leader>F", "<cmd>FzfLua live_grep<cr>", {noremap = true, silent = true}) 257vim.keymap.set("n", "<leader>F", "<cmd>FzfLua live_grep<cr>", {noremap = true, silent = true})
275vim.keymap.set("n", "<leader>b", "<cmd>FzfLua buffers<cr>") 258vim.keymap.set("n", "<leader>b", "<cmd>FzfLua buffers<cr>")
276vim.keymap.set("n", "<leader>d", vim.lsp.buf.definition, opts) 259vim.keymap.set("n", "<leader>d", vim.lsp.buf.definition, opts)
260vim.keymap.set("n", "<leader>df", function() vim.diagnostic.open_float() end, opts)
277vim.keymap.set("n", "<leader>k", vim.lsp.buf.hover, opts) 261vim.keymap.set("n", "<leader>k", vim.lsp.buf.hover, opts)
262vim.keymap.set("n", "<leader>ca", function() vim.lsp.buf.code_action() end, opts)
278vim.keymap.set("n", "<leader>r", color_mode, {desc = "Change mode light/dark"}) 263vim.keymap.set("n", "<leader>r", color_mode, {desc = "Change mode light/dark"})
279vim.keymap.set( 264vim.keymap.set("n", "<leader>t", function()
280 "n", 265 vim.cmd("terminal")
281 "<leader>t", 266 vim.cmd("startinsert")
282 function() 267end, {desc = "Open terminal in current window"})
283 vim.cmd("terminal")
284 vim.cmd("startinsert")
285 end,
286 {desc = "Open terminal in current window"}
287)
288 268
289vim.keymap.set( 269-- Visual mode mappings
290 "t", 270vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
291 "<Esc>", 271vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
292 function() 272
293 vim.cmd([[stopinsert]]) 273-- Terminal mode mapping
294 vim.cmd([[b#]]) 274vim.keymap.set("t", "<Esc>", function()
295 end, 275 vim.cmd([[stopinsert]])
296 {noremap = true, silent = true} 276 vim.cmd([[b#]])
297) 277end, {noremap = true, silent = true})