-- Move to window using the movement keys
vim.keymap.set("n", "", "h")
vim.keymap.set("n", "", "j")
vim.keymap.set("n", "", "k")
vim.keymap.set("n", "", "l")
-- Resize window using arrow keys
vim.keymap.set("n", "", "resize +2")
vim.keymap.set("n", "", "resize -2")
vim.keymap.set("n", "", "vertical resize -2")
vim.keymap.set("n", "", "vertical resize +2")
-- Move Lines
vim.keymap.set("n", "", ":m .+1==")
vim.keymap.set("v", "", ":m '>+1gv=gv")
vim.keymap.set("i", "", ":m .+1==gi")
vim.keymap.set("n", "", ":m .-2==")
vim.keymap.set("v", "", ":m '<-2gv=gv")
vim.keymap.set("i", "", ":m .-2==gi")
-- Switch buffers with
vim.keymap.set("n", "", "bprevious")
vim.keymap.set("n", "", "bnext")
-- Easier pasting
vim.keymap.set("n", "[p", ":pu!")
vim.keymap.set("n", "]p", ":pu")
-- Clear search with
vim.keymap.set({ "i", "n" }, "", "noh")
vim.keymap.set("n", "gw", "*N")
vim.keymap.set("x", "gw", "*N")
-- https://github.com/mhinz/vim-galore#saner-behavior-of-n-and-n
vim.keymap.set("n", "n", "'Nn'[v:searchforward]", { expr = true })
vim.keymap.set("x", "n", "'Nn'[v:searchforward]", { expr = true })
vim.keymap.set("o", "n", "'Nn'[v:searchforward]", { expr = true })
vim.keymap.set("n", "N", "'nN'[v:searchforward]", { expr = true })
vim.keymap.set("x", "N", "'nN'[v:searchforward]", { expr = true })
vim.keymap.set("o", "N", "'nN'[v:searchforward]", { expr = true })
-- Add undo break-points
vim.keymap.set("i", ",", ",u")
vim.keymap.set("i", ".", ".u")
vim.keymap.set("i", ";", ";u")
-- save in insert mode
vim.keymap.set("i", "", ":w")
vim.keymap.set("n", "", ":w")
-- better indenting
vim.keymap.set("v", "<", "", ">gv")
-- makes * and # work on visual mode too.
vim.cmd([[
function! g:VSetSearch(cmdtype)
let temp = @s
norm! gv"sy
let @/ = '\V' . substitute(escape(@s, a:cmdtype.'\'), '\n', '\\n', 'g')
let @s = temp
endfunction
xnoremap * :call g:VSetSearch('/')/=@/
xnoremap # :call g:VSetSearch('?')?=@/
]])