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

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay