Definir comment_symbols sin extra plugins, para diferentes lenguages
Migrando parte de mi workflow a Neovim, me encontré con este problema, que lo solucioné de la siguiente manera:
Sé que hay plugins que cumplen esta
función, y seguramente lo hagan mejor, sin embargo prefiero tener la menor cantidad de plugins posible.
1vim.api.nvim_exec([[
2augroup visual_commenting
3 autocmd!
4 autocmd FileType c,cpp,java,rust,go,kt,kts,zig let b:comment_symbol = '//'
5 autocmd FileType vim let b:comment_symbol = '"'
6 autocmd FileType sh,python,yaml,yml,nix let b:comment_symbol = '#'
7 autocmd FileType tex let b:comment_symbol = '%'
8 autocmd FileType lua let b:comment_symbol = '--'
9 autocmd BufEnter * silent! vnoremap <silent> <C-_> :<C-u>keepp '<,'>s@^@\=b:comment_symbol<CR>
10 autocmd BufEnter * silent! exec 'vnoremap <silent> <C-?> :<C-u>keepp ''<,''>s@^' . b:comment_symbol . '@<CR>'
11augroup END
12]], false)
Esto sólo soluciona aquellos comentarios que se hacen al principio de la línea, no soporta comentarios de bloque, pero es suficiente para mi caso de uso.
Se pueden agregar las líneas que
necesites para otros lenguages y símbolos
más esotéricos, si algo hiciste mal, o el
lenguage no está definido obtendras el
siguiente mensaje comment_symbol is not recognized
.
Debe haber una solución que es más cercana a las formas de Neovim, pero esto funciona.
Este código esta basado en esta respuesta del StackExchange de Vi y adaptada para que Lua lo pueda ejecutar.