DEV Community

Cover image for Buscadores personalizados con Mini.Pick
Jorge Meneses
Jorge Meneses

Posted on

Buscadores personalizados con Mini.Pick

Mini.Pick, parte del paquete de plugins Mini.Nvim desarrollados por el gran Evgeni Chasnovski, es una gran alternativa a Telescope. Con este módulo, podemos buscar rápidamente entre nuestros archivos, buffers abiertos, símbolos del servidor del lenguaje de nuestro proyecto, etc.

El plugin incluye un conjunto de buscadores por defecto, a los cuales también podemos agregar una gran lista adicional usando el módulo Mini.Extra. Sin embargo, también podemos crear nuestros propios buscadores y su configuración.

Aquí tenemos dos ejemplos.

Selector de temas (colorschemes)

Este es una modificación al selector de temas de colores desarrollado por el proyecto MVIM, una distribución de Neovim basada en los módulos Mini.

Image description

Este selector nos permite rápidamente buscar entre los temas de colores que tenemos instalados, mostrar un previo del tema usando la tecla <Tab> y al seleccionarlos, genera una transición entre el tema anterior y el nuevo haciendo uso de la función Colorscheme provista por Mini.Colors. El código es el siguiente:

require("mini.pick").setup()

-- Define la ventana del selector centrada en la pantalla
local win_config = function()
  local height = math.floor(0.3 * vim.o.lines)
  local width = math.floor(0.3 * vim.o.columns)
  return {
    anchor = "NW",
    height = height,
    width = width,
    row = math.floor(0.5 * (vim.o.lines - height)),
    col = math.floor(0.5 * (vim.o.columns - width)),
  }
end

-- MiniPick Colorscheme Picker
local set_colorscheme = function(name)
  pcall(function()
    vim.cmd("Colorscheme " .. name) -- Usa mini.colors Colorscheme para animar transición
  end)
end
local pick_colorscheme = function()
  local init_scheme = vim.g.colors_name
  local new_scheme = MiniPick.start({
    source = {
      name = "Colorscheme", 
      items = vim.fn.getcompletion("", "color"),
      choose = set_colorscheme,
    },
    mappings = {
      move_down = "<C-n>",
      move_start = "<C-g>",
      move_up = "<C-p>",
      preview = {
        char = "<Tab>",
        func = function()
          local item = MiniPick.get_picker_matches()
          if item and item.current then
            pcall(function()
              vim.cmd("colorscheme " .. item.current)
            end)
          end
        end,
      },
    },
    window = { config = win_config },
  })
  if new_scheme == nil then
    set_colorscheme(init_scheme)
  end
end

Enter fullscreen mode Exit fullscreen mode

Sugerencias otográficas

También podemos usar Mini.Pick para remplazar las sugerencias ortográficas, de forma que se posicionen bajo el cursor, como en un procesador de texto.

Image description

Aquí el código:

local spellsuggest = function()
  local local_opts = { n_suggestions = 5 } -- Define el número de sugerencias a mostrar
  local opts = {
    mappings = {
      caret_left = "<Left>",
      caret_right = "<Right>",

      choose = "<CR>",

      delete_char = "<BS>",
      delete_char_right = "<Del>",
      delete_left = "<C-u>",
      delete_word = "<C-w>",

      move_down = "<C-n>",
      move_start = "<C-g>",
      move_up = "<C-p>",

      scroll_down = "<C-f>",
      scroll_left = "<C-h>",
      scroll_right = "<C-l>",
      scroll_up = "<C-b>",

      stop = "<Esc>",
    },
    window = {
      config = {
        relative = "cursor",
        anchor = "NW",
        row = 1,
        col = 0,
        width = 40,
        height = 5,
      },
    },
  }
  MiniExtra.pickers.spellsuggest(local_opts, opts)
end

-- Remplaza el atajo de teclado "z="
vim.keymap.set("n", "z=", spellsuggest, { desc = "Abre las sugerencias ortográficas" })



Enter fullscreen mode Exit fullscreen mode

Top comments (0)