⚡ Plugin de commentaires intelligent et puissant pour Neovim ⚡

commentstring . Lire :h comment.commentstring// ) et le bloc ( /* */ ) Commentaires. ) Répéter le support pour gcc , gbc et ses amis[count]gcc et [count]gbcgcw gc$ ) et de relève ( 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 fournit des documents d'aide qui peuvent être accessibles en fonctionnant :help comment-nvim
Vous devez d'abord appeler la méthode setup() pour créer les mappages par défaut.
Remarque - Si vous êtes confronté
require ( ' Comment ' ). setup () lua << EOF
require ( ' Comment ' ). setup ()
EOF Voici la configuration par défaut pour la setup() . Si vous souhaitez remplacer, modifiez simplement l'option que vous souhaitez, elle sera fusionnée avec la configuration par défaut. Lire :h comment.config pour plus d'informations.
{
--- 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 ,
} Lorsque vous appelez la méthode setup() , Comment.nvim met en place une cartographie de base qui peut être utilisée en mode normal et visuel pour vous permettre de démarrer avec le plaisir de commenter les choses.
Ces mappages sont activés par défaut. (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 Ces mappages sont activés par défaut. (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) Ce plugin a une prise en charge indigène de Treesitter pour le calcul commentstring qui fonctionne pour plusieurs langages (injectés / intégrés) comme Vue ou Markdown. Mais en raison de la nature de l'arbre analysé, cette implémentation a quelques limitations connues.
jsx/tsx . Sa mise en œuvre était assez compliquée. Pour les cas d'utilisation à l'avance, utilisez NVIM-TS-Context-ComentString. Voir la section pre_hook pour l'intégration.
Remarque - Ce plugin ne dépend pas de NVIM-TreeSitter, mais il est recommandé d'installer facilement des analyseurs d'arbre-sitter.
Il existe deux méthodes de crochet, c'est-à-dire pre_hook et post_hook qui sont appelées avant le commentaire et après le commentaire respectivement. Les deux doivent être fournis pendant setup() .
pre_hook - appelé avec un argument ctx (lire :h comment.utils.CommentCtx ) avant (un) commentaire. Peut éventuellement renvoyer un commentstring à utiliser pour les commentaires (non). {
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 ,
} Vous pouvez également intégrer NVIM-TS-Context-CommentString en utilisant pre_hook pour commenter facilement les fichiers tsx/jsx .
Remarque -
Comment.nvimprend déjà en chargetreesitterhors de la boîte pour toutes les langues sauftsx/jsx.
{
pre_hook = require ( ' ts_context_commentstring.integrations.comment_nvim ' ). create_pre_hook (),
}post_hook - Cette méthode est appelée après (non) commentaire. Il reçoit le même argument ctx (lire :h comment.utils.CommentCtx ) comme 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 ,
} Le post_hook peut être implémenté pour couvrir certains cas d'utilisation de niche comme les suivants:
#if 0 . Voir un exemple ici.pre_hook ) et déplacer le curseur vers le bloc suivant (en utilisant post_hook ). Voyez ceci.Remarque: Lorsque vous appuyez sur
gc,gbet ses amis,cmode(mode de commentaire) à l'intérieurpre_hooksera toujours basculé parce que lorsque la pré-hook est appelée, à ce moment-là, nous ne savons pas sigcougbcommentera ou décommentera les lignes. Mais heureusement, nous le savons avantpost_hooket cela recevra toujours un statut de commentaire ou de non-commission
Vous pouvez utiliser ignore pour ignorer certaines lignes pendant les commentaires / décomancement. Il peut prendre Lua Regex String ou une fonction qui renvoie une chaîne regex et doit être fournie dans setup() .
Remarque: Ignore ne fonctionne que lorsque le commentaire Linewise. C'est par conception. Car ignorer les lignes dans les commentaires de bloc n'a pas beaucoup de sens.
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 ,
} La plupart des langues / filetypes ont une prise en charge native pour les commentaires via commentstring , mais il pourrait y avoir un type de fichier qui n'est pas pris en charge. Il existe deux façons de permettre des commentaires pour les filetypes non pris en charge:
commentstring pour ce type de fichier particulier comme celui qui suit. Lire :h commentstring pour plus d'informations. vim . bo . commentstring = ' //%s '
-- or
vim . api . nvim_command ( ' set commentstring=//%s ' )commentstring . Lire :h comment.ft pour plus d'informations. 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 ' )Les PR (s) sont les bienvenus pour ajouter plus de commentaires à l'intérieur du plugin
Il existe plusieurs façons de contribuer des bogues de rapports / correction, demandes de fonctionnalités. Vous pouvez également soumettre des commentaires à ce plugin en mettant à jour ft.lua et en envoyant des PR.
/**%s*/ (JS), ///%s (rouille) ---- ------------------
-- This is a header --
---- ------------------