feat: Refactor neovim to a more modern stack.
This commit is contained in:
@@ -1,97 +1,44 @@
|
||||
local lsp = vim.lsp
|
||||
local handlers = lsp.handlers
|
||||
-- local saga = require('lspsaga')
|
||||
-- saga.init_lsp_saga()
|
||||
local map = vim.keymap.set
|
||||
|
||||
-- Space as leader.
|
||||
vim.api.nvim_set_keymap('n', '<Space>', '<NOP>', {noremap = true, silent = true})
|
||||
vim.g.mapleader = ' '
|
||||
vim.g.maplocalleader = ' '
|
||||
map('n', '<Space>', '<Nop>', { silent = true })
|
||||
map('i', ',m', '<Esc>', { silent = true })
|
||||
|
||||
-- Exit insert mode with ,h.
|
||||
vim.api.nvim_set_keymap('i', ',m', '<ESC>', {noremap = true, silent = true})
|
||||
for _, mode in ipairs({ 'n', 'i', 'v', 's', 'x', 'c', 'o', 't' }) do
|
||||
map(mode, '<C-g>', '<Esc>', { silent = true })
|
||||
end
|
||||
map('i', '<C-l>', '<Right>', { silent = true })
|
||||
|
||||
-- Remap for colemak-dhm.
|
||||
-- Left.
|
||||
-- vim.api.nvim_set_keymap('', 'm', 'h', {noremap = true, silent = true})
|
||||
-- vim.api.nvim_set_keymap('', 'h', 'm', {noremap = true, silent = true})
|
||||
-- Down.
|
||||
-- vim.api.nvim_set_keymap('', 'j', 'n', {noremap = true, silent = true})
|
||||
-- vim.api.nvim_set_keymap('', 'n', 'j', {noremap = true, silent = true})
|
||||
-- Up.
|
||||
-- vim.api.nvim_set_keymap('', 'k', 'e', {noremap = true, silent = true})
|
||||
-- vim.api.nvim_set_keymap('', 'e', 'k', {noremap = true, silent = true})
|
||||
-- Right.
|
||||
-- vim.api.nvim_set_keymap('', 'l', 'i', {noremap = true, silent = true})
|
||||
-- vim.api.nvim_set_keymap('', 'i', 'l', {noremap = true, silent = true})
|
||||
for _, direction in ipairs({ 'h', 'j', 'k', 'l' }) do
|
||||
map('n', '<leader>w' .. direction, '<C-w>' .. direction, { desc = 'Move to window ' .. direction })
|
||||
end
|
||||
map('n', '<leader>fw', '<cmd>write<cr>', { desc = 'Write file' })
|
||||
map('n', '<leader><leader>', '<C-^>', { desc = 'Alternate buffer' })
|
||||
|
||||
-- C-g as ESC
|
||||
vim.api.nvim_set_keymap('n', '<C-g>', '<ESC>', {silent = true})
|
||||
vim.api.nvim_set_keymap('i', '<C-g>', '<ESC>', {silent = true})
|
||||
vim.api.nvim_set_keymap('v', '<C-g>', '<ESC>', {silent = true})
|
||||
vim.api.nvim_set_keymap('s', '<C-g>', '<ESC>', {silent = true})
|
||||
vim.api.nvim_set_keymap('x', '<C-g>', '<ESC>', {silent = true})
|
||||
vim.api.nvim_set_keymap('c', '<C-g>', '<ESC>', {silent = true})
|
||||
vim.api.nvim_set_keymap('o', '<C-g>', '<ESC>', {silent = true})
|
||||
vim.api.nvim_set_keymap('l', '<C-g>', '<ESC>', {silent = true})
|
||||
vim.api.nvim_set_keymap('t', '<C-g>', '<ESC>', {silent = true})
|
||||
map('n', '<leader>ff', '<cmd>Telescope find_files<cr>', { desc = 'Find files' })
|
||||
map('n', '<leader>fb', '<cmd>Oil .<cr>', { desc = 'Browse current directory' })
|
||||
map('n', '<leader>fc', '<cmd>Oil<cr>', { desc = 'Browse file directory' })
|
||||
map('n', '<leader>fo', '<cmd>Oil<cr>', { desc = 'Open file directory' })
|
||||
map('n', '<leader>ps', '<cmd>Telescope live_grep<cr>', { desc = 'Search text' })
|
||||
map('n', '<leader>bs', '<cmd>Telescope buffers<cr>', { desc = 'Search buffers' })
|
||||
map('n', '<leader>sr', '<cmd>GrugFar<cr>', { desc = 'Search and replace' })
|
||||
map('n', '<leader>rsr', '<cmd>GrugFarWithin<cr>', { desc = 'Open range replacement' })
|
||||
|
||||
-- Move right when in insert mode.
|
||||
vim.api.nvim_set_keymap("i", '<C-l>', '<Right>', {noremap = true, silent = true})
|
||||
map({ 'n', 'x' }, '<leader>ca', vim.lsp.buf.code_action, { desc = 'Code action' })
|
||||
map('n', '<leader>lgd', vim.lsp.buf.definition, { desc = 'Go to definition' })
|
||||
map('n', '<leader>lgD', vim.lsp.buf.declaration, { desc = 'Go to declaration' })
|
||||
map('n', '<leader>lgr', vim.lsp.buf.references, { desc = 'Find references' })
|
||||
map('n', '<leader>lgi', vim.lsp.buf.implementation, { desc = 'Go to implementation' })
|
||||
map('n', '<leader>lr', vim.lsp.buf.rename, { desc = 'Rename symbol' })
|
||||
map('n', '<leader>lf', function()
|
||||
require('conform').format({ async = true, lsp_format = 'fallback' })
|
||||
end, { desc = 'Format buffer' })
|
||||
map('x', '<leader>lrf', vim.lsp.buf.format, { desc = 'Format selection' })
|
||||
map('n', 'K', function()
|
||||
vim.lsp.buf.hover({ border = 'rounded', max_width = 80 })
|
||||
end, { desc = 'Hover documentation' })
|
||||
|
||||
-- Leader window movement.
|
||||
vim.api.nvim_set_keymap("n", '<Leader>wh', '<C-w>h', {noremap = true, silent = true})
|
||||
vim.api.nvim_set_keymap("n", '<Leader>wj', '<C-w>j', {noremap = true, silent = true})
|
||||
vim.api.nvim_set_keymap("n", '<Leader>wk', '<C-w>k', {noremap = true, silent = true})
|
||||
vim.api.nvim_set_keymap("n", '<Leader>wl', '<C-w>l', {noremap = true, silent = true})
|
||||
|
||||
-- Quick save.
|
||||
vim.api.nvim_set_keymap('n', '<Leader>fw', ':w<CR>', {silent = true})
|
||||
|
||||
-- Toggle between buffers.
|
||||
vim.api.nvim_set_keymap('n', '<Leader><Leader>', '<C-^>', {noremap = true, silent = true})
|
||||
|
||||
-- Find files inside the current folder.
|
||||
vim.api.nvim_set_keymap('n', '<Leader>ff', '<cmd>Telescope find_files<cr>',{})
|
||||
-- Find files and folders allowing creation.
|
||||
vim.api.nvim_set_keymap('n', '<Leader>fb', '<cmd>Telescope file_browser<cr>', {noremap = true})
|
||||
-- File brosers starting at the cwd.
|
||||
vim.api.nvim_set_keymap('n', '<Leader>fc', '<cmd>Telescope file_browser path=%:p:h<cr>', {noremap = true})
|
||||
-- File browser that allows edits in-buffer.
|
||||
vim.keymap.set("n", "<Leader>fo", "<CMD>Oil<CR>", { desc = "Open parent directory" })
|
||||
-- Do a grep search in the current folder.
|
||||
vim.api.nvim_set_keymap('n', '<Leader>ps', ':Rg<cr>',{})
|
||||
-- Search among the currently open buffers.
|
||||
vim.api.nvim_set_keymap('n', '<Leader>bs', '<cmd>Telescope buffers<cr>',{})
|
||||
-- Code actions.
|
||||
vim.api.nvim_set_keymap('n', '<Leader>ca', "<Cmd>lua vim.lsp.buf.code_action()<CR>",{silent = true, noremap = true})
|
||||
vim.api.nvim_set_keymap('x', '<Leader>ca', "<Cmd>lua vim.lsp.buf.range_code_action()<CR>",{silent = true, noremap = true})
|
||||
-- Search and replace.
|
||||
vim.api.nvim_set_keymap('n', '<Leader>sr', ':GrugFar<cr>', {noremap = true, silent = true})
|
||||
vim.api.nvim_set_keymap('n', '<Leader>rsr', ':GrugFarWithin<cr>', {noremap = true, silent = true})
|
||||
|
||||
|
||||
-- Hover doc popup
|
||||
local pop_opts = { border = "rounded", max_width = 80 }
|
||||
handlers["textDocument/hover"] = lsp.with(handlers.hover, pop_opts)
|
||||
handlers["textDocument/signatureHelp"] = lsp.with(handlers.signature_help, pop_opts)
|
||||
|
||||
vim.api.nvim_set_keymap('n', '<Leader>lgd', '<cmd>lua vim.lsp.buf.definition()<CR>', {noremap = true, silent = true})
|
||||
vim.api.nvim_set_keymap('n', '<Leader>lgD', '<cmd>lua vim.lsp.buf.declaration()<CR>', {noremap = true, silent = true})
|
||||
vim.api.nvim_set_keymap('n', '<Leader>lgr', '<cmd>lua vim.lsp.buf.references()<CR>', {noremap = true, silent = true})
|
||||
vim.api.nvim_set_keymap('n', '<Leader>lgi', '<cmd>lua vim.lsp.buf.implementation()<CR>', {noremap = true, silent = true})
|
||||
vim.api.nvim_set_keymap('n', '<Leader>lf', '<cmd>lua require("conform").format({ async = true, lsp_fallback = true })<CR>', {noremap = true, silent = true})
|
||||
vim.keymap.set('v', '<Leader>lrf', vim.lsp.buf.format)
|
||||
vim.api.nvim_set_keymap('n', '<Leader>lr', '<cmd>Lspsaga rename<CR>', {silent = true})
|
||||
vim.api.nvim_set_keymap('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>', {noremap = true, silent = true})
|
||||
|
||||
------ Trouble
|
||||
vim.api.nvim_set_keymap("n", "<leader>lld", '<cmd>lua vim.diagnostic.open_float({scope="line"})<CR>',
|
||||
{silent = true, noremap = true}
|
||||
) -- Mnemonic "lsp line diagnostics"
|
||||
vim.api.nvim_set_keymap("n", "<leader>lwd", "<cmd>Trouble workspace_diagnostics<cr>",
|
||||
{silent = true, noremap = true}
|
||||
) -- Mnemonic "lsp workspace diagnostics"
|
||||
vim.api.nvim_set_keymap("n", "<leader>ldd", "<cmd>Trouble document_diagnostics<cr>",
|
||||
{silent = true, noremap = true}
|
||||
) -- Mnemonic "lsp document diagnostics"
|
||||
map('n', '<leader>lld', function()
|
||||
vim.diagnostic.open_float({ scope = 'line', border = 'rounded' })
|
||||
end, { desc = 'Line diagnostics' })
|
||||
map('n', '<leader>lwd', '<cmd>Trouble diagnostics toggle<cr>', { desc = 'Workspace diagnostics' })
|
||||
map('n', '<leader>ldd', '<cmd>Trouble diagnostics toggle filter.buf=0<cr>', { desc = 'Buffer diagnostics' })
|
||||
|
||||
Reference in New Issue
Block a user