Files
neovim/runtime/doc
Mathias Fußenegger 123f8d229e feat(snippet): set snippet keymaps permanent instead of dynamic (#31887)
Problem:

Given that `vim.snippet.expand()` sets temporary `<tab>`/`<s-tab>`
keymaps there is no way to build "smart-tab" functionality where `<tab>`
chooses the next completion candidate if the popup menu is visible.

Solution:

Set the keymap permanent in `_defaults`.

The downside of this approach is that users of multiple snippet engine's
need to adapt their keymaps to handle all their engines that are in use.
For example:

    vim.keymap.set({ 'i', 's' }, "<Tab>", function()
      if foreign_snippet.active() then
        return "<Cmd>lua require('foreign_snippet').jump()<CR>"
      elseif vim.snippet.active({ direction = 1 }) then
        return "<Cmd>lua vim.snippet.jump(1)<CR>"
      else
        return key
      end
    end, { expr = true })

Upside is that using `vim.keymap.set` to override keymaps is a well
established pattern and `vim.snippet.expand` calls made by nvim itself
or plugins have working keymaps out of the box.


Co-authored-by: Maria José Solano <majosolano99@gmail.com>
2025-03-14 09:51:52 +01:00
..
2023-07-25 05:07:13 -07:00
2025-03-02 14:27:52 -08:00
2025-01-01 12:29:51 -08:00
2024-10-23 14:13:42 +02:00
2024-05-15 23:19:26 +02:00
2025-02-17 10:33:20 +08:00
2024-10-23 14:13:42 +02:00
2021-09-10 08:48:27 +02:00
2023-06-25 17:14:28 +02:00
2023-10-29 16:02:32 +08:00
2025-02-10 18:56:11 +01:00
2025-01-09 09:26:45 -08:00
2023-05-13 21:33:22 +02:00
2025-01-11 10:34:12 +01:00
2024-03-12 13:51:53 +08:00
2025-02-17 10:33:20 +08:00
2022-10-14 08:01:13 -07:00
2025-03-07 16:37:42 -08:00
2024-11-21 06:50:30 +08:00
2023-11-06 19:03:08 +08:00
2024-01-18 00:14:48 -08:00
2024-04-30 04:30:21 -07:00
2025-03-02 14:27:52 -08:00
2023-01-01 15:05:13 +01:00
2023-06-19 08:40:33 -07:00
2025-03-02 14:27:52 -08:00
2025-02-15 14:55:25 +01:00
2025-03-07 16:37:42 -08:00
2023-08-10 17:28:02 +08:00
2025-01-03 08:29:36 -08:00
2024-04-23 08:20:36 +08:00
2024-05-11 18:14:03 +08:00
2023-04-23 15:22:55 +02:00
2023-01-03 10:07:43 +00:00
2023-06-25 17:14:28 +02:00
2023-06-19 08:40:33 -07:00
2023-06-25 17:14:28 +02:00
2023-06-25 17:14:28 +02:00
2021-05-01 22:29:03 -04:00
2023-06-25 17:14:28 +02:00
2018-10-29 10:01:44 +01:00
2021-04-29 09:27:19 -04:00
2023-06-25 17:14:28 +02:00
2024-04-30 05:54:03 +08:00
2021-04-29 20:42:16 -04:00
2023-06-26 11:29:12 +02:00
2023-07-25 05:07:13 -07:00
2021-04-27 09:21:34 -04:00
2023-06-19 08:40:33 -07:00
2023-06-25 17:14:28 +02:00