local M = {} local ui = require('fschauen.util.icons').ui local map = function(mode, lhs, rhs, opts) if mode ~= 'c' then opts = opts or {} opts.silent = opts.silent ~= false -- silent by default end vim.keymap.set(mode, lhs, rhs, opts) end M.setup = function() -- better navigation for wrapped lines map('n', 'j', 'gj') map('n', 'k', 'gk') -- maintain cursor position when joining lines map('n', 'J', 'mzJ`z') -- retain selection when making changes in visual mode map('v', '', 'gv') map('v', '', 'gv') map('v', 'g', 'ggv') map('v', 'g', 'ggv') map('v', '>', '>gv') map('v', '<', '<gv') -- place destination of important movements in the center of the screen map('n', 'n', 'nzzzv') map('n', 'N', 'Nzzzv') map('n', '*', '*zzzv') map('n', '#', '#zzzv') map('n', 'g*', 'g*zzzv') map('n', 'g#', 'g#zzzv') map('n', '', 'zzzv') map('n', '', 'zzzv') -- easier window navigation map('n', '', 'j') map('n', '', 'k') map('n', '', 'h') map('n', '', 'l') local window = require 'fschauen.window' -- window resizing map('n', '', window.resize_up(2), { desc = 'Resize window upward' }) map('n', '', window.resize_down(2), { desc = 'Resize window downward' }) map('n', '', window.resize_left(2), { desc = 'Resize window leftward' }) map('n', '', window.resize_right(2), { desc = 'Resize window rightward' }) -- easy tab navigation map('n', '', 'tabnext') map('n', '', 'tabprevious') -- move lines up and down map('n', '', [[:move .+1==]]) map('n', '', [[:move .-2==]]) map('v', '', [[:move '>+1gv=gv]]) map('v', '', [[:move '<-2gv=gv]]) map('i', '', [[:move .+1==gi]]) map('i', '', [[:move .-2==gi]]) -- move to begin/end of line in insert mode map('i', '', '^') map('i', '', '$') -- move to begin of line in command mode ( moves to end by default) map('c', '', '') -- more convenient way of entering normal mode from terminal mode map('t', [[]], [[]]) -- recall older/recent command-line from history map('c', '', '') map('c', '', '') -- trigger InsertLeave when leaving Insert mode with ctrl-c (see :help i_CTRL-C) map('i', '', '') -- quickly change background map('n', 'bg', [[let &background = &background ==? 'light' ? 'dark' : 'light']]) local diagnostic = require 'fschauen.diagnostic' -- navigate diagnostics map('n', '', diagnostic.goto_next, { desc = ui.Diagnostic .. ' [d]iagnostic [n]ext' }) map('n', '', diagnostic.goto_prev, { desc = ui.Diagnostic .. ' [d]iagnostic [p]revious' }) map('n', 'dd', diagnostic.toggle, { desc = ui.Diagnostic .. ' [d]iagnostic enable/[d]isable' }) map('n', 'do', diagnostic.open_float, { desc = ui.Diagnostic .. ' [d]iagnostic [o]pen' }) map('n', 'dh', diagnostic.hide, { desc = ui.Diagnostic .. ' [d]iagnostic [h]ide' }) map('n', 'ds', diagnostic.select_virtual_text_severity, { desc = ui.Diagnostic .. ' [d]iagnostic [s]everity' }) -- disable highlight until next search map('n', 'h', 'nohlsearch') -- navigate items in quickfix and location lists map('n', 'j', 'cnextzz') map('n', 'k', 'cpreviouszz') map('n', 'j', 'lnextzz') map('n', 'k', 'lpreviouszz') -- toggle quickfix and loclist map('n', 'll', window.toggle_quickfix, { desc = ui.Toggle .. ' toggle quickfix' }) map('n', 'll', window.toggle_loclist, { desc = ui.Toggle .. ' toggle loclist' }) local options = require('fschauen.util.options') -- toggle options map('n', 'sn', options.toggle_number, { desc = ui.Toggle .. " toggle 'number'" }) map('n', 'sr', options.toggle_relativenumber, { desc = ui.Toggle .. " toggle 'relativenumber'" }) map('n', 'sl', options.toggle_list, { desc = ui.Toggle .. " toggle 'list'" }) map('n', 'sw', options.toggle_wrap, { desc = ui.Toggle .. " toggle 'wrap'" }) map('n', 'ss', options.toggle_spell, { desc = ui.Toggle .. " toggle 'spell'" }) end return M