Ordenando e removendo linhas duplicadas com Neovim

Uma boa organização facilita a leitura do código. Listas desorganizadas dificultam a manutenção do projeto, sem falar que o código fica com um aspecto pouco profissional.

Estas duas funções ordenam e removem linhas duplicadas em blocos de texto selecionados no Neovim.

A função sort_lines ordena as linhas selecionadas:

function sort_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)

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

A função sort_and_uniq_lines ordena e remove linhas duplicadas:

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)

  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

Para usar essas funções, adicione os mapeamentos abaixo no seu arquivo de configuração do Neovim:

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 }
)

Código fonte completo

Quando você seleciona um bloco de texto no modo visual e pressiona <Leader>s, o Neovim ordena as linhas. Se você pressionar <Leader>u, o Neovim ordena e remove as linhas duplicadas.

Espero que essas funções sejam úteis.

Referências

Cesar Gimenes

Última modificação