Personalizando o Neovim: Ordenação e Remoção de Linhas Duplicadas com Lua

Continuando as personalizações do Neovim, apresento duas funções que uso frequentemente: sort_lines e sort_and_uniq_lines. Como o nome sugere, elas ordenam o conteúdo das linhas selecionadas e, no caso de sort_and_uniq_lines, também eliminam duplicatas.

function sort_lines()
  -- Obter a posição inicial e final da seleção
  local start_pos = vim.fn.getpos("'<")
  local end_pos = vim.fn.getpos("'>")

  -- Converter a posição para o índice da linha

  -- Ajuste start_pos porque as linhas no Lua começam do 0
  local start_line = start_pos[2] - 1
  -- Não precisa ajustar end_line
  local end_line = end_pos[2]

  -- Obter as linhas selecionadas
  local lines = vim.api.nvim_buf_get_lines(
      0,
      start_line,
      end_line,
      false
  )

  -- Ordenar as linhas
  table.sort(lines)

  -- Substituir as linhas originais
  vim.api.nvim_buf_set_lines(
    0,
    start_line,
    end_line,
    false,
    lines
  )
end

function sort_and_uniq_lines()
  local start_pos = vim.fn.getpos("'<")
  local end_pos = vim.fn.getpos("'>")

  local start_line = start_pos[2] - 1
  local end_line = end_pos[2]

  local lines = vim.api.nvim_buf_get_lines(
    0,
    start_line,
    end_line,
    false
  )

  table.sort(lines)

  -- Remover linhas duplicadas
  local uniq_lines = {}
  local last_line = nil
  for _, line in ipairs(lines) do
    if line ~= last_line then
      table.insert(uniq_lines, line)
      last_line = line
    end
  end

  vim.api.nvim_buf_set_lines(
    0,
    start_line,
    end_line,
    false,
    uniq_lines
  )
end

vim.api.nvim_set_keymap(
    'v',
    '<Leader>s',
    ':lua sort_lines()<CR>',
    { noremap = true, silent = true }
)
vim.api.nvim_set_keymap(
    'v',
    '<Leader>u',
    ':lua sort_and_uniq_lines()<CR>',
    { noremap = true, silent = true }
)

sort_lines.lua

Para utilizar o script, basta adicionar o arquivo sort_lines.lua no diretório config/nvim/lua e carregá-lo no início do seu arquivo init.lua.

require "sort_lines"

Para usar essas funções, pressione as combinações de teclas leader+s ou leader+u com o texto selecionado no modo visual.

Ordenar listas no código, como menus ou elementos de um array, facilita a leitura. Além disso, dá um toque de organização e limpeza. Essas pequenas ações tornam o código mais agradável e reduzem o esforço para entendê-lo.

Como mencionei no meu sistema de bookmarks, essas automações tornam o Neovim poderoso e personalizável. Muitas vezes, você não precisa de plugins; basta um pouco de criatividade.

Cesar Gimenes

Última modificação