⚡ Plugin de comentários inteligente e poderoso para neovim ⚡

commentstring . Leia :h comment.commentstring// ) e bloco ( /* */ ). ) Repita o suporte para gcc , gbc e amigos[count]gcc e [count]gbcgcw gc$ ) e UP-Down ( gc2j gc4k )gci{ gbat ) -- add this to your lua/plugins.lua, lua/plugins/init.lua, or the file you keep your other plugins:
{
' numToStr/Comment.nvim ' ,
opts = {
-- add any options here
}
}
use {
' numToStr/Comment.nvim ' ,
config = function ()
require ( ' Comment ' ). setup ()
end
}Plug ' numToStr/Comment.nvim '
" Somewhere after plug#end()
lua require ( ' Comment ' ). setup () Comment.nvim fornece documentos de ajuda que podem ser acessados pela execução :help comment-nvim
Primeiro, você precisa chamar o método setup() para criar os mapeamentos padrão.
Nota - Se você está enfrentando pedidos de chaves são mapeados, mas eles não estão funcionando, por favor, tente isto
require ( ' Comment ' ). setup () lua << EOF
require ( ' Comment ' ). setup ()
EOF A seguir estão a configuração padrão para o setup() . Se você deseja substituir, basta modificar a opção que você deseja, ela será mesclada com a configuração padrão. Leia :h comment.config Para mais informações.
{
--- Add a space b/w comment and the line
padding = true ,
--- Whether the cursor should stay at its position
sticky = true ,
--- Lines to be ignored while (un)comment
ignore = nil ,
--- LHS of toggle mappings in NORMAL mode
toggler = {
--- Line-comment toggle keymap
line = ' gcc ' ,
--- Block-comment toggle keymap
block = ' gbc ' ,
},
--- LHS of operator-pending mappings in NORMAL and VISUAL mode
opleader = {
--- Line-comment keymap
line = ' gc ' ,
--- Block-comment keymap
block = ' gb ' ,
},
--- LHS of extra mappings
extra = {
--- Add comment on the line above
above = ' gcO ' ,
--- Add comment on the line below
below = ' gco ' ,
--- Add comment at the end of line
eol = ' gcA ' ,
},
--- Enable keybindings
--- NOTE: If given `false` then the plugin won't create any mappings
mappings = {
--- Operator-pending mapping; `gcc` `gbc` `gc[count]{motion}` `gb[count]{motion}`
basic = true ,
--- Extra mapping; `gco`, `gcO`, `gcA`
extra = true ,
},
--- Function to call before (un)comment
pre_hook = nil ,
--- Function to call after (un)comment
post_hook = nil ,
} Quando você chama o método setup() , Comment.nvim configura algum mapeamento básico que pode ser usado no modo normal e visual para você começar com o prazer de comentar as coisas.
Esses mapeamentos são ativados por padrão. (Config: mappings.basic )
`gcc` - Toggles the current line using linewise comment
`gbc` - Toggles the current line using blockwise comment
`[ count ]gcc` - Toggles the number of line given as a prefix-count using linewise
`[ count ]gbc` - Toggles the number of line given as a prefix-count using blockwise
`gc[ count ]{motion}` - (Op-pending) Toggles the region using linewise comment
`gb[ count ]{motion}` - (Op-pending) Toggles the region using blockwise comment `gc` - Toggles the region using linewise comment
`gb` - Toggles the region using blockwise comment Esses mapeamentos são ativados por padrão. (Config: mappings.extra )
`gco` - Insert comment to the next line and enters INSERT mode
`gcO` - Insert comment to the previous line and enters INSERT mode
`gcA` - Insert comment to end of the current line and enters INSERT mode# Linewise
`gcw` - Toggle from the current cursor position to the next word
`gc $ ` - Toggle from the current cursor position to the end of line
`gc}` - Toggle until the next blank line
`gc5j` - Toggle 5 lines after the current cursor position
`gc8k` - Toggle 8 lines before the current cursor position
`gcip` - Toggle inside of paragraph
`gca}` - Toggle around curly brackets
# Blockwise
`gb2}` - Toggle until the 2 next blank line
`gbaf` - Toggle comment around a function (w/ LSP/treesitter support)
`gbac` - Toggle comment around a class (w/ LSP/treesitter support) Este plug -in possui suporte ao Treesitter nativo para calcular commentstring que funciona para vários idiomas (injetados/incorporados) como Vue ou Markdown. Mas devido à natureza da árvore analisada, essa implementação tem algumas limitações conhecidas.
jsx/tsx . Sua implementação foi bastante complicada. Para casos de uso antecipado, use NVIM-TS-Context-CompommentString. Consulte a seção pre_hook para a integração.
NOTA -Este plug-in não depende do NVIM-Treesitter, mas é recomendado para instalar facilmente os analisadores.
Existem dois métodos de gancho, ou seja, pre_hook e post_hook que são chamados antes do comentário e depois do comentário, respectivamente. Ambos devem ser fornecidos durante setup() .
pre_hook - chamado com um argumento ctx (leia :h comment.utils.CommentCtx ) antes (un) comentário. Opcionalmente, pode retornar um commentstring a ser usado para (não) comentários. {
pre_hook = function ( ctx )
if ctx . range . srow == ctx . range . erow then
-- do something with the current line
else
-- do something with lines range
end
end ,
} Você também pode integrar o NVIM-TS-Context-CompommentString usando pre_hook para comentar facilmente arquivos tsx/jsx .
NOTA -
Comment.nvimjá suportatreesitterfora do corpo para todos os idiomas, excetotsx/jsx.
{
pre_hook = require ( ' ts_context_commentstring.integrations.comment_nvim ' ). create_pre_hook (),
}post_hook - Este método é chamado após (un) comentando. Ele recebe o mesmo argumento ctx (leia :h comment.utils.CommentCtx ) que pre_hook . {
post_hook = function ( ctx )
if ctx . range . srow == ctx . range . erow then
-- do something with the current line
else
-- do something with lines range
end
end ,
} O post_hook pode ser implementado para cobrir alguns casos de uso de nicho, como o seguinte:
#if 0 . Veja um exemplo aqui.pre_hook ) e movendo o cursor para o próximo bloco (usando post_hook ). Veja isso.NOTA: Ao pressionar
gc,gbe amigos,cmode(modo de comentário) dentropre_hooksempre será alterado porque, quando o pré-gancho for chamado, naquele momento não sabemos segcougbcomentam ou descompuncionam as linhas. Mas, felizmente, sabemos disso antespost_hooke isso sempre receberá o status de comentário ou apumismo
Você pode usar ignore para ignorar certas linhas durante o comentário/descomposição. Pode ser necessário lua regex string ou uma função que retorna uma string regex e deve ser fornecida durante setup() .
NOTA: Ignorar apenas funciona quando com comentários linhas. Isso é por design. Como ignorar linhas nos comentários do bloco não faz muito sentido.
string -- ignores empty lines
ignore = ' ^$ '
-- ignores line that starts with `local` (excluding any leading whitespace)
ignore = ' ^(%s*)local '
-- ignores any lines similar to arrow function
ignore = ' ^const(.*)=(%s?)%((.*)%)(%s?)=> 'function {
ignore = function ()
-- Only ignore empty lines for lua files
if vim . bo . filetype == ' lua ' then
return ' ^$ '
end
end ,
} A maioria dos idiomas/filetipos possui suporte nativo para comentários por meio commentstring mas pode haver um tipo de arquivo que não é suportado. Existem duas maneiras de permitir comentários para filetipos não suportados:
commentstring para esse tipo específico como o seguinte. Leia :h commentstring para mais informações. vim . bo . commentstring = ' //%s '
-- or
vim . api . nvim_command ( ' set commentstring=//%s ' )commentstring . Leia :h comment.ft Para mais informações. local ft = require ( ' Comment.ft ' )
-- 1. Using set function
ft
-- Set only line comment
. set ( ' yaml ' , ' #%s ' )
-- Or set both line and block commentstring
. set ( ' javascript ' , { ' //%s ' , ' /*%s*/ ' })
-- 2. Metatable magic
ft . javascript = { ' //%s ' , ' /*%s*/ ' }
ft . yaml = ' #%s '
-- Multiple filetypes
ft ({ ' go ' , ' rust ' }, ft . get ( ' c ' ))
ft ({ ' toml ' , ' graphql ' }, ' #%s ' )PR (s) são bem -vindos para adicionar mais com comentários dentro do plug -in
Existem várias maneiras de contribuir com relatórios/corrigindo bugs, solicitações de recursos. Você também pode enviar o comentário para este plug -in atualizando o ft.lua e enviando PR.
/**%s*/ (js), ///%s (ferrugem) ---- ------------------
-- This is a header --
---- ------------------