diff --git a/lyrathorpe/home/KEYBINDINGS.md b/lyrathorpe/home/KEYBINDINGS.md index a64d2f1..fb6a2fd 100644 --- a/lyrathorpe/home/KEYBINDINGS.md +++ b/lyrathorpe/home/KEYBINDINGS.md @@ -188,10 +188,22 @@ across vim splits and tmux panes seamlessly. Everything else is stock vim, plus: | `rn` | Rename symbol (LSP; `` is `Space`) | | `ca` | Code action (LSP) | -LSP covers Nix, Lua, Python and Terraform (the work box adds C# and Helm); -completion (nvim-cmp) appears as you type. Files are formatted on save -(conform-nvim). `:Git` opens fugitive; gitsigns shows gutter signs. which-key -pops up after `` to show the rest. +### Completion menu (nvim-cmp) + +Active only while the completion popup is open (it appears as you type, e.g. +file paths): + +| Shortcut | Action | +| ----------------------- | ------------------------------------------------------------------ | +| `Tab` / `Shift`+`Tab` | Select next / previous item | +| `Ctrl`+`n` / `Ctrl`+`p` | Select next / previous item | +| `Ctrl`+`Space` | Open the completion menu | +| `Enter` | Confirm the highlighted item (no auto-select; otherwise a newline) | +| `Ctrl`+`e` | Dismiss the menu | + +LSP covers Nix, Lua, Python and Terraform (the work box adds C# and Helm). +Files are formatted on save (conform-nvim). `:Git` opens fugitive; gitsigns +shows gutter signs. which-key pops up after `` to show the rest. --- diff --git a/lyrathorpe/home/editor.nix b/lyrathorpe/home/editor.nix index a6569cc..23f37e7 100644 --- a/lyrathorpe/home/editor.nix +++ b/lyrathorpe/home/editor.nix @@ -89,6 +89,18 @@ enable = true; autoEnableSources = true; settings = { + # nvim-cmp ships no default keymaps; without these the menu shows but + # nothing accepts it. confirm uses select=false so a bare stays a + # newline unless an entry is explicitly highlighted. + mapping = { + "" = "cmp.mapping.select_next_item()"; + "" = "cmp.mapping.select_prev_item()"; + "" = "cmp.mapping.select_next_item()"; + "" = "cmp.mapping.select_prev_item()"; + "" = "cmp.mapping.confirm({ select = false })"; + "" = "cmp.mapping.complete()"; + "" = "cmp.mapping.abort()"; + }; snippet.expand = "function(args) require('luasnip').lsp_expand(args.body) end"; sources = [ { name = "nvim_lsp"; }