DEV Community

Discussion on: NeoVim: init.lua, built in LSP e mais

Collapse
 
voyeg3r profile image
Sérgio Araújo • Edited

Aqui seguem algumas sugestões de um velho vimmer que agora só usa neovim:

Uma função na qual as opções de mapeamento tem um default, caso omitidas:

-- map helper
local function map(mode, lhs, rhs, opts)
    local options = { noremap = true }
    if opts then
        options = vim.tbl_extend("force", options, opts)
    end
    vim.api.nvim_set_keymap(mode, lhs, rhs, options)
end

-- other interesting text objects
-- reference: https://www.reddit.com/r/vim/comments/adsqnx/comment/edjw792
local chars = { "_", "-", ".", ":", ",", ";", "<bar>", "/", "<bslash>", "*", "+", "%", "#", "`" }
for k, v in ipairs(chars) do
    map("x", "i" .. v, ":<C-u>norm! T" .. v .. "vt" .. v .. "<CR>")
    map("x", "a" .. v, ":<C-u>norm! F" .. v .. "vf" .. v .. "<CR>")
    map("o", "a" .. v, ":normal! va" .. v .. "<CR>")
    map("o", "i" .. v, ":normal! vi" .. v .. "<CR>")
end
-- por precaução altero o timeoutlen, que é o tempo de espera para que o nvim aplique um mapeamento:
opt.timeoutlen = 500
Enter fullscreen mode Exit fullscreen mode
-- com esse mapeamento mantenho a função original do Ctrl-l e de quebra o higlight search é boleano
map(
    "n",
    "<C-l>",
    [[ (&hls && v:hlsearch ? ':nohls' : ':set hls')."\n" <BAR> redraw<CR>]],
    { silent = true, expr = true }
)
Enter fullscreen mode Exit fullscreen mode

Aqui altero o undo break, de modo que cada vez que insiro um ponto, vírgula, exclamação etc o vim adiciona um undo break, assim se eu digitar algo do tipo: "Estou demonstrando a versatilidade do vim, e de quebra ajudando outras pessoas", se eu pressionar a tecla "u" em modo normal o desfazer só vai até a vírgula.

-- More molecular undo of text
-- map("i", ",", ",<c-g>u")
map("i", ".", ".<c-g>u")
map("i", "!", "!<c-g>u")
map("i", "?", "?<c-g>u")
map("i", ";", ";<c-g>u")
map("i", ":", ":<c-g>u")
map("i", "]", "]<c-g>u")
map("i", "}", "}<c-g>u")
Enter fullscreen mode Exit fullscreen mode
Collapse
 
enrsaid profile image
Enrique Marques Junior

Perfeito, certamente vou adicionar.
Muito obrigado por comentar!

Collapse
 
voyeg3r profile image
Sérgio Araújo

Henrique: Atualizei a função para mapeamentos trocando vim.api.nvim_set_keymap por vim.keymap.set e removi alguns undo breaks porque tava muito exagerado.