echasnovski / mini.nvim

Library of 40+ independent Lua modules improving overall Neovim (version 0.8 and higher) experience with minimal effort
MIT License
5.02k stars 185 forks source link

`s` seems bound even after remapping #877

Closed rwijtvliet closed 4 months ago

rwijtvliet commented 4 months ago

Contributing guidelines

Module(s)

echasnovski/mini.surround

Description

I have remapped the shortcuts for surround, but s is still affected.

Neovim version

0.9.5

Steps to reproduce

I have remapped surround actions so they all use gs instead of s:

require('lazy').setup({
    'echasnovski/mini.surround',
    keys = function(_, keys)
      -- Populate the keys based on the user's options
      local plugin = require('lazy.core.config').spec.plugins['mini.surround']
      local opts = require('lazy.core.plugin').values(plugin, 'opts', false)
      local mappings = {
        { opts.mappings.add, desc = 'Add Surrounding', mode = { 'n', 'v' } },
        { opts.mappings.delete, desc = 'Delete Surrounding' },
        { opts.mappings.replace, desc = 'Replace Surrounding' },
        { opts.mappings.find, desc = 'Find Right Surrounding' },
        { opts.mappings.find_left, desc = 'Find Left Surrounding' },
        { opts.mappings.highlight, desc = 'Highlight Surrounding' },
        { opts.mappings.update_n_lines, desc = 'Update `MiniSurround.config.n_lines`' },
      }
      mappings = vim.tbl_filter(function(m)
        return m[1] and #m[1] > 0
      end, mappings)
      return vim.list_extend(mappings, keys)
    end,
    opts = {
      mappings = {
        add = 'gsa', -- Add surrounding in Normal and Visual modes
        --e.g. gsaiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
        --e.g. gsaa}) - [S]urround [A]dd [A]round [}]Braces [)]Paren
        delete = 'gsd', -- Delete surrounding
        --e.g.    gsd"   - [S]urround [D]elete ["]quotes
        replace = 'gsr', -- Replace surrounding
        --e.g.     gsr)'  - [S]urround [R]eplace [)]Paren by [']quote
        find = 'gsf', -- Find surrounding (to the right)
        find_left = 'gsF', -- Find surrounding (to the left)
        highlight = 'gsh', -- Highlight surrounding
        update_n_lines = 'gsn', -- Update `n_lines`
      },
      n_lines = 500,
    },
  })

And in normal mode I have remapped s to move right (for dvorak layout, in case anyone is wondering):

vim.keymap.set('', 'h', 'h', { desc = 'Move cursor left' }) -- for completeness
vim.keymap.set('', 'n', "v:count == 0 ? 'gj' : 'j'", { expr = true, desc = 'Move cursor down' })
vim.keymap.set('', 't', "v:count == 0 ? 'gk' : 'k'", { expr = true, desc = 'Move cursor up' })
vim.keymap.set('', 's', 'l', { desc = 'Move cursor right' })

Expected behavior

s moves the cursor right, just as h moves it left.

Actual behavior

When I press s, the cursor moves after some ~half-second delay. (Unlike the other directional keys which are immediate.) I suspect because it's waiting for a second key press. If I disable the plugin (enabled = false), the delay is gone.

Is this a bug? Or is there a config setting I am overlooking?

echasnovski commented 4 months ago

Thanks for the issue!

This does not look a 'mini.surround' issue, but some misconfiguration problem. The following call (not using 'lazy.nvim') works as expected:

require('mini.surround').setup({
  mappings = {
    add = 'gsa', -- Add surrounding in Normal and Visual modes
    --e.g. gsaiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
    --e.g. gsaa}) - [S]urround [A]dd [A]round [}]Braces [)]Paren
    delete = 'gsd', -- Delete surrounding
    --e.g.    gsd"   - [S]urround [D]elete ["]quotes
    replace = 'gsr', -- Replace surrounding
    --e.g.     gsr)'  - [S]urround [R]eplace [)]Paren by [']quote
    find = 'gsf', -- Find surrounding (to the right)
    find_left = 'gsF', -- Find surrounding (to the left)
    highlight = 'gsh', -- Highlight surrounding
    update_n_lines = 'gsn', -- Update `n_lines`
  },
  n_lines = 500,
})
vim.keymap.set('', 's', 'l', { desc = 'Move cursor right' })

You can execute :map s to see which mappings are there that start with "s".

rwijtvliet commented 4 months ago

Thanks for your fast reply!

It seems the original mappings are also set:

n  shn         * <Lua 227: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Highlight next surrounding
n  sFn         * <Lua 226: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Find next left surrounding
n  sfn         * <Lua 225: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Find next right surrounding
n  srn         * <Lua 224: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Replace next surrounding
n  sdn         * <Lua 223: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Delete next surrounding
n  shl         * <Lua 222: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Highlight previous surrounding
n  sFl         * <Lua 221: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Find previous left surrounding
n  sfl         * <Lua 220: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Find previous right surrounding
n  srl         * <Lua 219: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Replace previous surrounding
n  sdl         * <Lua 218: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Delete previous surrounding
x  sa          * :<C-U>lua MiniSurround.add('visual')<CR>
                 Add surrounding to selection
n  sn          * <Lua 217: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:841>
                 Update `MiniSurround.config.n_lines`
n  sh          * <Lua 216: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Highlight surrounding
n  sF          * <Lua 215: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Find left surrounding
n  sf          * <Lua 214: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Find right surrounding
n  sr          * <Lua 213: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Replace surrounding
n  sd          * <Lua 212: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Delete surrounding
n  sa          * <Lua 211: ~/.local/share/nvim/lazy/mini.nvim/lua/mini/surround.lua:1208>
                 Add surrounding
   s           * l
                 Move cursor right

I'll try your suggestion and let you know if the issue persists.

Edit: The setup-function was called twice (once without arguments, so the defaults) - not sure, why.

Thanks for your help!