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