gelguy / wilder.nvim

A more adventurous wildmenu
MIT License
1.35k stars 34 forks source link

No search suggestions when using \v (very magic) #56

Closed jdsutherland closed 3 years ago

jdsutherland commented 3 years ago

Search suggestions don't appear for /\v (but do with /). I'm using nnoremap / /\v to automatically use very magic, which I suspect is a fairly popular remap.

gelguy commented 3 years ago

You can add an extra check and remove the leading \v:

call wilder#set_option('pipeline', [
      \   wilder#branch(
      \     wilder#cmdline_pipeline(),
      \     [
      \       {_, x -> x[:1] ==# '\v' ? x[2:] : x},
      \     ] + wilder#search_pipeline(),
      \   ),
      \ ])

Note that PCRE2 isn't compatible with Vim's regex so the special characters won't be correctly translated.

pchampio commented 1 year ago

I have trouble creating this function in lua:

        wilder.branch(
          { wilder.check(function(_, x) return x == '' end), wilder.history() },
          wilder.python_file_finder_pipeline({
            file_command = function(_, arg)
                if string.find(arg, ".") ~= nil then return { "rg", "--files", "--hidden" } else return { "rg", "--files" } end
            end,
            dir_command = function(_, arg)
                if string.find(arg, ".") ~= nil then return { "fd", "-td", "-H" } else return { "fd", "-td" } end
            end,
            filters = { 'cpsm_filter' },
          }),
          wilder.substitute_pipeline({
            pipeline = wilder.python_search_pipeline({
              skip_cmdtype_check = 1,
              pattern = wilder.python_fuzzy_pattern({ start_at_boundary = 0 })
            })
          }),
          wilder.cmdline_pipeline({ fuzzy = 2, fuzzy_filter = wilder.lua_fzy_filter() }),
          function(_, x)
            if string.sub(x, 1, 2) == "\\v" then x = string.sub(x, 3) end
            vim.api.nvim_notify('"'..x..'"', 6, {})
            if x == '' then return false end
            return x
          end,
          wilder.search_pipeline()
          -- wilder.python_search_pipeline({
          --   pattern = wilder.python_fuzzy_pattern({ start_at_boundary = 1 })
          -- })
        ),

which I would of think would be the same does not work, it produces (see the characters in the popup menu): image