135 lines
4.4 KiB
Lua
135 lines
4.4 KiB
Lua
local set = vim.opt
|
|
local opt = { noremap = true }
|
|
local opts = { noremap = true, silent = true }
|
|
local term_opts = { silent = true }
|
|
|
|
-- shorten function name
|
|
local keymap = vim.api.nvim_set_keymap
|
|
|
|
-- Modes
|
|
-- normal_mode = 'n',
|
|
-- insert_mode = 'i', visual_mode = 'v', visual_block_mode = 'x',
|
|
-- term_mode = 't',
|
|
-- command_mode = 'c',
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- set space as leader key
|
|
vim.g.mapleader = " " -- Set space as the leader key
|
|
vim.g.maplocalleader = " " -- Optional: set local leader key to space as well
|
|
-- switch colon to semicolon
|
|
keymap("n", ";", ":", opt)
|
|
keymap("n", ":", ";", opt)
|
|
|
|
-- no arrows, move the vim way
|
|
-- keymap("n", "<up>", "<nop>", opts)
|
|
-- keymap("n", "<down>", "<nop>", opts)
|
|
-- keymap("n", "<left>", "<nop>", opts)
|
|
-- keymap("n", "<right>", "<nop>", opts)
|
|
-- keymap("i", "<up>", "<nop>", opts)
|
|
-- keymap("i", "<down>", "<nop>", opts)
|
|
-- keymap("i", "<left>", "<nop>", opts)
|
|
-- keymap("i", "<right>", "<nop>", opts)
|
|
|
|
-- lazy write / quit
|
|
keymap("n", "<leader>w", ":w<cr>", opts)
|
|
keymap("n", "<leader>q", ":q<cr>", opts)
|
|
keymap("n", "<leader>wq", ":wq<cr>", opts)
|
|
keymap("n", "<leader>W", ":w!<cr>", opts)
|
|
keymap("n", "<leader>Q", ":q!<cr>", opts)
|
|
keymap("n", "<leader>WQ", ":wq!<cr>", opts)
|
|
|
|
-- navigate properly when lines are wrapped
|
|
keymap("n", "j", "gj", opts)
|
|
keymap("n", "k", "gk", opts)
|
|
|
|
-- toggle linenumber
|
|
vim.keymap.set("n", "<leader>n", function()
|
|
if vim.wo.number and vim.wo.relativenumber then
|
|
vim.wo.number = false
|
|
vim.wo.relativenumber = false
|
|
elseif vim.wo.number then
|
|
vim.wo.relativenumber = true
|
|
else
|
|
vim.wo.number = true
|
|
end
|
|
end, { desc = "Toggle line number modes" })
|
|
|
|
-- maintaining visual mode after shifting > and <
|
|
keymap("v", ">", ">gv", opts)
|
|
keymap("v", "<", "<gv", opts)
|
|
|
|
-- -- move text up and down in visual block mode
|
|
keymap("x", "<s-j>", ":move '>+1<CR>gv-gv", opts)
|
|
keymap("x", "<s-k>", ":move '<-2<CR>gv-gv", opts)
|
|
|
|
-- navigate buffers
|
|
keymap("n", "<s-l>", ":bnext<cr>", opts)
|
|
keymap("n", "<s-h>", ":bprevious<cr>", opts)
|
|
|
|
-- scrolling command-line history
|
|
keymap("c", "<c-j>", "<c-n>", opts)
|
|
keymap("c", "<c-k>", "<c-p>", opts)
|
|
|
|
-- open the current file in the default program
|
|
keymap("n", "<leader>x", [[:!xdg-open %<cr><cr>]], opts)
|
|
|
|
-- -- no ex mode for me - Q reformats long lines (auto-wrap)
|
|
keymap("n", "Q", "gq", opts)
|
|
keymap("x", "Q", "gq", opts)
|
|
|
|
-- prevent accidentally record functionality
|
|
keymap("n", "q", "<nop>", opts)
|
|
keymap("n", "qq", "q", opts)
|
|
|
|
-- redirect change operations to blackhole avoid spoiling 'y' register content
|
|
keymap("n", "c", '"_c', opts)
|
|
keymap("n", "C", '"_C', opts)
|
|
|
|
-- toggle cursorcolumn
|
|
keymap("n", "<leader>c", ":set cursorcolumn! cursorline! <cr>", opts)
|
|
|
|
-- clear highlighting from the search
|
|
keymap("n", "<esc>", ":nohlsearch<cr><esc>", opts)
|
|
|
|
-- toggle spell checking
|
|
keymap("n", "<leader>se", ":setlocal spell! spelllang=en_us,nl<cr>", opts)
|
|
keymap("n", "<leader>sd", ":setlocal spell! spelllang=de_at,nl<cr>", opts)
|
|
|
|
-- date time stamp
|
|
keymap("n", "<leader>dt", [[i<c-r>=strftime("%d.%m.%Y")<cr><space>]], opts)
|
|
keymap("n", "<leader>tt", [[i<c-r>=strftime("%H:%M")<cr><space>]], opts)
|
|
|
|
-- double space over word to find and replace
|
|
keymap("n", "<space><space>", [[:%s/\<<c-r>=expand("<cword>")<cr>\>/]], opt)
|
|
|
|
-- write file if you forgot to give it sudo permission
|
|
keymap("c", "w!!", [[w !sudo tee %]], opt)
|
|
|
|
-- diff since last save
|
|
keymap("n", "<leader>df", [[:w !diff % -<cr>]], opt)
|
|
keymap("x", "<leader>df", [[:w !diff % -<cr>]], opt)
|
|
|
|
-- Yank to System Clipbpard
|
|
keymap("x", "Y", '"+y', opt)
|
|
keymap("n", "<leader>y", ':Yazi<cr>', opt)
|
|
|
|
local hop = require('hop')
|
|
local directions = require('hop.hint').HintDirection
|
|
vim.keymap.set('', 'f', function()
|
|
hop.hint_char1({ direction = directions.AFTER_CURSOR, })
|
|
end, {remap=true})
|
|
vim.keymap.set('', 'F', function()
|
|
hop.hint_char1({ direction = directions.BEFORE_CURSOR, })
|
|
end, {remap=true})
|
|
vim.keymap.set('', 't', function()
|
|
hop.hint_char1({ direction = directions.AFTER_CURSOR, hint_offset = -1 })
|
|
end, {remap=true})
|
|
vim.keymap.set('', 'T', function()
|
|
hop.hint_char1({ direction = directions.BEFORE_CURSOR, hint_offset = 1 })
|
|
end, {remap=true})
|
|
|
|
vim.keymap.set('n', '<Left>', '<C-w>h', { noremap = true })
|
|
vim.keymap.set('n', '<Right>', '<C-w>l', { noremap = true })
|
|
vim.keymap.set('n', '<Up>', '<C-w>k', { noremap = true })
|
|
vim.keymap.set('n', '<Down>', '<C-w>j', { noremap = true })
|