-- move selection in visual mode vim.keymap.set("v", "J", ":m '>+1gv=gv") vim.keymap.set("v", "K", ":m '<-2gv=gv") -- move to line start/end vim.keymap.set('i', "", "$") vim.keymap.set('i', "", "^") vim.keymap.set({ 'n', 'v' }, "", '$') vim.keymap.set({ 'n', 'v' }, "", '^') -- yank to clipboard vim.keymap.set("n", "y", "\"+y") vim.keymap.set("v", "y", "\"+y") vim.keymap.set("n", "Y", "\"+Y") -- paste without copy vim.keymap.set("x", "p", "\"_dP") -- delete without copy vim.keymap.set("n", "d", "\"_d"); vim.keymap.set("v", "d", "\"_d"); -- search and replace hovered word vim.keymap.set("n", "s", [[:%s/\<\>//gI]]) -- make file executable vim.keymap.set("n", "x", "!chmod +x %", {silent = true}) -- insert shebang on top of file vim.keymap.set("n", "sb", function () local filetype = vim.bo.filetype local mapping = { jl = "/usr/bin/env julia", julia = "/usr/bin/env julia", sh = "bash", zsh = "zsh", py = "/usr/bin/env python", python = "/usr/bin/env python", } local command = mapping[filetype] if (command == nil) then return end -- local handle = assert(io.popen(string.format("/bin/zsh -c \"where %s\"", command))) -- local result = (handle:lines())() -- handle:close() local buf = vim.api.nvim_get_current_buf() -- print(result) vim.api.nvim_buf_set_lines(buf, 0, 0, true, { "#!" .. command }) vim.api.nvim_command('write') local filename = vim.api.nvim_buf_get_name(0) assert(io.popen(string.format("/usr/bin/chmod +x \"%s\"", filename))) end) -- window splitting vim.keymap.set("n", "", "sp") vim.keymap.set("n", "", "vs") -- window switching vim.keymap.set("n", "", "wincmd h") vim.keymap.set("n", "", "wincmd j") vim.keymap.set("n", "", "wincmd k") vim.keymap.set("n", "", "wincmd l") -- window movement vim.keymap.set("n", "", "wincmd H") vim.keymap.set("n", "", "wincmd L") vim.keymap.set("n", "", "wincmd K") vim.keymap.set("n", "", "wincmd J") vim.keymap.set("n", "", "wincmd r") vim.keymap.set("n", "", "vert res +1") vim.keymap.set("n", "", "vert res -1") vim.keymap.set("n", "", "res +1") vim.keymap.set("n", "", "res -1") -- lsp vim.keymap.set("n", "", vim.lsp.buf.code_action) vim.keymap.set("n", "", vim.lsp.buf.format) vim.keymap.set("n", "gD", vim.lsp.buf.declaration) vim.keymap.set("n", "gd", vim.lsp.buf.definition) vim.keymap.set("n", "gt", vim.lsp.buf.type_definition) vim.keymap.set("n", "K", vim.lsp.buf.hover) vim.keymap.set("n", "ls", vim.lsp.buf.document_symbol) vim.keymap.set("n", "li", vim.lsp.buf.implementation) vim.keymap.set("n", "lr", vim.lsp.buf.references) vim.keymap.set("n", "", vim.lsp.buf.rename) vim.keymap.set("n", "sh", vim.lsp.buf.signature_help) vim.keymap.set("n", "do", vim.diagnostic.open_float) vim.keymap.set("n", "dn", function() vim.diagnostic.jump({count=1, float=true}) end) vim.keymap.set("n", "dp", function() vim.diagnostic.jump({count=-1, float=true}) end)