-- This file allows binding arbitrary keys in vim. -- If a keymap is tied to a specific plugin, it should generally be specified -- in the plugins file attached to that plugin. -- -- When making a binding, group, etc, the key to bind to shoudl be specified -- as an array. However, as long as _each character_ represents a single keypress -- the key can be specified as a string. E.g., `key = 'jj'` and `key = { 'j', 'j' }` -- are equivalent. However, `key = { '' }` would be parsed as -- `key = {'<', 'A', '-', 'h', '>'} -- -- There are four main types of keymap bindings: -- * Group: This only serves to provide a label for the keymap legend for -- keys under a prefix. (e.g., label for `f` when we have bindings -- for `fg` and `fh`). -- `{ mode = 'n', key = { '', 'p' }, group = true, label = "Sample Group" }` -- * Virtual: This registers a label in the keymap legend, but doesn't -- actually change the binding of the key. -- `{ mode = 'n', key = { 'g', 'q' }, virtual = true, description = 'reformat text, wrapping line length' }` -- * Hidden: The key is bound through normal vim functionality, bypassing the -- keymap legend so that the key will not show up in the legend. -- `{ mode = 'n', key = { 'h' }, map = ':echo "Hello, world!'"', label = 'Hello world button', hidden = true -- `{ mode = 'n', key = 'aaa', map = ':echo "Hello, world!'"', label = 'Hello world button', hidden = true} -- * Normal: The key is bound, and the key is shown in the legend. -- `{ mode = 'n', key = { 'j' }, map = ':echo "Hello, world!'"', label = 'Hello world button' } -- `{ mode = 'n', key = 'aaa', map = ':echo "Hello, world!'"', label = 'Hello world button' } return { -- { mode = 'n', key = { '' }, map = ':call SynStack()', label = 'show syntax token' }, { mode = 'n', key = { '' }, map = ':lua nukevim:help()', label = 'help' }, -- Provide labels for the main leader groups { mode = 'n', key = { '', 'c' }, group = true, label = 'code' }, { mode = 'n', key = { '', 'd' }, group = true, label = 'dev tools' }, { mode = 'v', key = { '', 'd' }, group = true, label = 'dev tools' }, { mode = 'n', key = { '', 'g' }, group = true, label = 'git' }, { mode = 'n', key = { '', 'l' }, group = true, label = 'language tools' }, { mode = 'n', key = { '', 'w' }, group = true, label = 'workspace' }, -- A group label for the key legend { mode = 'n', key = 'z', group = true, label = 'text operations' }, -- A "virtual" key to add an existing vim bind to the legend { mode = 'n', key = 'z=', virtual = true, description = 'check spelling' }, -- Escape from insert with jj { mode = 'i', key = 'j', group = true, label = 'j' }, { mode = 'i', key = 'jj', map = '', label = 'escape' }, -- Dehighlight and recompute syntax highlighting { mode = 'n', key = { '', '' }, map = ':silent noh echo:syn sync fromstart', label = 'refresh' }, -- Directory browsing { mode = 'n', key = { '-' }, virtual = true, label = "browse files" }, -- Move between buffers { mode = 'n', key = { '' }, map = 'h', label = 'select buffer left' }, { mode = 'n', key = { '' }, map = 'j', label = 'select buffer down' }, { mode = 'n', key = { '' }, map = 'k', label = 'select buffer up' }, { mode = 'n', key = { '' }, map = 'l', label = 'select buffer right' }, { mode = 'i', key = { '' }, map = 'h', label = 'select buffer left', hidden = true }, -- { mode = 'i', key = { '' }, map = 'j', label = 'select buffer down', hidden = true }, -- { mode = 'i', key = { '' }, map = 'k', label = 'select buffer up', hidden = true }, { mode = 'i', key = { '' }, map = 'j', label = 'select buffer down', hidden = true, options = { silent = true }}, { mode = 'i', key = { '' }, map = 'k', label = 'select buffer up', hidden = true, options = { silent = true }}, { mode = 'i', key = { '' }, map = 'l', label = 'select buffer right', hidden = true }, -- Tab navigation { mode = 'n', key = { '' }, map = ':tabnew', label = 'new tab' }, { mode = 'n', key = { '' }, map = ':tabnext', label = 'next tab' }, { mode = 'i', key = { '' }, map = ':tabnext', label = 'next tab' }, { mode = 'n', key = { '' }, map = ':tabprev', label = 'previous tab' }, { mode = 'i', key = { '' }, map = ':tabprev', label = 'previous tab' }, -- Scroll autocomplete { mode = 'i', key = { '' }, map = '', label = 'next autocomplete', hidden = true }, { mode = 'i', key = { '' }, map = '', label = 'previous autocomplete', hidden = true }, -- Terminal bindings { mode = 't', key = { '' }, map = 'h', label = 'select buffer left', hidden = true }, { mode = 't', key = { '' }, map = 'j', label = 'select buffer down', hidden = true }, { mode = 't', key = { '' }, map = 'k', label = 'select buffer up', hidden = true }, { mode = 't', key = { '' }, map = 'l', label = 'select buffer right', hidden = true }, { mode = 't', key = { '' }, map = ':tabprev', label = 'select buffer right', hidden = true }, { mode = 't', key = { '' }, map = ':tabnext', label = 'select buffer right', hidden = true }, { mode = 't', key = { 'j', 'j' }, map = '', label = 'escape', hidden = true }, }