dotfiles/nvim/lua/config/keymaps.lua

112 lines
4.2 KiB
Lua
Raw Normal View History

2024-01-26 17:47:29 +01:00
local indent = require 'config.keymaps.indent'
2024-06-14 22:49:23 +02:00
local map = require 'config.helpers.keymap'
local n = map 'n'
local i = map 'i'
local v = map 'v'
local t = map 't'
local nv = map { 'n', 'v' }
2024-01-21 23:32:15 +01:00
2024-06-13 21:48:16 +02:00
n 'j' 'gj' 'Move: down by line'
n 'k' 'gk' 'Move: up by line'
2024-01-21 23:32:15 +01:00
2024-07-08 20:40:10 +02:00
n '<Tab>' ':bn<CR>' 'Buffer: next'
n '<S-Tab>' ':bp<CR>' 'Buffer: previous'
2024-06-13 21:48:16 +02:00
n '<Leader>bd' ':bd<CR>' 'Buffer: delete'
2024-01-21 23:32:15 +01:00
2024-06-13 21:48:16 +02:00
t '<Esc><Esc>' [[<C-\><C-n>]] 'Exit from terminal mode'
2024-01-21 23:32:15 +01:00
2024-06-13 21:48:16 +02:00
n '<C-h>' '<C-w>h' 'Window: move left'
n '<C-j>' '<C-w>j' 'Window: move down'
n '<C-k>' '<C-w>k' 'Window: move up'
n '<C-l>' '<C-w>l' 'Window: move right'
2024-01-21 23:32:15 +01:00
2024-01-26 17:47:29 +01:00
-- Indentation
2024-07-08 20:40:10 +02:00
i '<Tab>' (indent.smarttab) { 'Indent', expr = true }
2024-06-13 21:48:16 +02:00
v '>' '>gv' 'Indent right'
v '<' '<gv' 'Indent left'
v '|' (indent.normalize) 'Indent normalize'
2024-01-25 22:57:52 +01:00
2024-01-26 17:47:29 +01:00
-- Diagnostics
n '<leader>e' (vim.diagnostic.open_float) 'Open error diagnostics'
n '[d' (vim.diagnostic.goto_prev) 'Previous diagnostic message'
n ']d' (vim.diagnostic.goto_next) 'Next diagnostic message'
n '<leader>dl' (vim.diagnostic.setloclist) 'Diagnostic: list messages'
2024-01-25 22:57:52 +01:00
-- X
local function insert_date()
2024-06-13 21:48:16 +02:00
local row, col = unpack(vim.api.nvim_win_get_cursor(0))
local text = os.date '!%Y-%m-%dT%H:%M:%SZ' ---@cast text string
col = math.min(#vim.api.nvim_get_current_line(), col + 1)
vim.api.nvim_buf_set_text(0, row - 1, col, row - 1, col, { text })
end
2024-07-08 20:40:10 +02:00
n '<Leader>xd' (insert_date) 'Execute: full date'
v '<Leader>xs' [[:sort<CR>]] 'Sort: by first word'
2024-01-25 22:57:52 +01:00
2024-01-26 17:47:29 +01:00
-- Meta
2024-01-25 22:57:52 +01:00
local function open_config()
2024-06-13 21:48:16 +02:00
vim.fn.chdir '~/.config/nvim'
vim.cmd 'Explore'
2024-01-25 22:57:52 +01:00
end
n '<leader>mn' (open_config) 'Meta: neovim config'
2024-02-19 22:54:33 +01:00
n '<leader>ml' ':Lazy<CR>' 'Meta: lazy'
2024-01-25 22:57:52 +01:00
2024-01-21 23:32:15 +01:00
-- LSP
2024-01-23 22:23:58 +01:00
do
2024-06-13 21:48:16 +02:00
local group = vim.api.nvim_create_augroup('UserLspConfig', {})
local function setup_lsp_keymaps(ev)
-- Enable completion triggered by <c-x><c-o>
vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
local function format()
vim.lsp.buf.format({ async = true })
end
local function format_selection()
vim.lsp.buf.format({
async = true,
range = {
["start"] = vim.api.nvim_buf_get_mark(0, "<"),
["end"] = vim.api.nvim_buf_get_mark(0, ">"),
}
})
end
local function workspaces_list()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end
2024-07-08 20:40:10 +02:00
local function toggle_inlay_hints()
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({}))
end
2024-06-13 21:48:16 +02:00
local buffer = ev.buf
2024-07-08 20:40:10 +02:00
n ',' (toggle_inlay_hints) {'LSP: show inlay hints', buffer}
2024-06-13 21:48:16 +02:00
n 'K' (vim.lsp.buf.hover) {'LSP: show hover help', buffer}
n '<C-k>' (vim.lsp.buf.signature_help) {'LSP: signature help', buffer}
n '<Leader>ld' (vim.lsp.buf.definition) {'LSP: definition', buffer}
n '<Leader>lD' (vim.lsp.buf.declaration) {'LSP: declaration', buffer}
n '<Leader>li' (vim.lsp.buf.implementation) {'LSP: implementation', buffer}
n '<Leader>lR' (vim.lsp.buf.references) {'LSP: references', buffer}
n '<Leader>lt' (vim.lsp.buf.type_definition) {'LSP: type definition', buffer}
n '<leader>lr' (vim.lsp.buf.rename) {'LSP: rename identifier', buffer}
nv '<leader>la' (vim.lsp.buf.code_action) {'LSP: code actions', buffer}
n '<leader>lf' (format) {'LSP: format file', buffer}
v '<leader>lf' (format_selection) {'LSP: format file', buffer}
n '<leader>wa' (vim.lsp.buf.add_workspace_folder) {'LSP: add workspace folder', buffer}
n '<leader>wr' (vim.lsp.buf.remove_workspace_folder) {'LSP: remove workspace folder', buffer}
n '<leader>wl' (workspaces_list) {'LSP: list workspace folders', buffer}
end
vim.api.nvim_create_autocmd('LspAttach', {
group = group,
callback = setup_lsp_keymaps
})
2024-01-23 22:23:58 +01:00
end