⚡ Умный и мощный плагин для комментирования для Neovim ⚡

commentstring . Читайте :h comment.commentstring// ) и Block ( /* */ ). ) Повторите поддержку gcc , gbc и друзей[count]gcc и [count]gbcgcw gc$ ) и вверх вниз ( 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 предоставляет справочные документы, к которым можно получить доступ к запуску :help comment-nvim
Сначала вам нужно вызвать метод setup() для создания сопоставлений по умолчанию.
ПРИМЕЧАНИЕ - если вы столкнетесь с ключевыми связями, но они не являются рабочей проблемой, пожалуйста, попробуйте это
require ( ' Comment ' ). setup () lua << EOF
require ( ' Comment ' ). setup ()
EOF Ниже приведены конфигурация по умолчанию для setup() . Если вы хотите переопределить, просто измените желаемую опцию, то она будет объединена с конфигурацией по умолчанию. Читайте :h comment.config для получения дополнительной информации.
{
--- 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 ,
} Когда вы вызовите метод setup() , Comment.nvim устанавливает некоторое базовое отображение, которое можно использовать в обычном и визуальном режиме, чтобы вы начали с удовольствия от комментирования.
Эти отображения включены по умолчанию. (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 Эти отображения включены по умолчанию. (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) Этот плагин обладает собственной поддержкой Treesitter для расчета commentstring , который работает для нескольких (введенных/встроенных) языков, таких как Vue или Markdown. Но из -за природы проанализированного дерева эта реализация имеет некоторые известные ограничения.
jsx/tsx . Его реализация была довольно сложной. Для предварительного использования используйте NVIM-TS-Context-CommentString. См. Раздел pre_hook для интеграции.
ПРИМЕЧАНИЕ -этот плагин не зависит от NVIM-Treesitter, однако он рекомендуется легко установить анализаторы деревьев.
Есть два метода крючка, то есть pre_hook и post_hook , которые называются до комментариев и после комментария соответственно. Оба должны быть предоставлены во время setup() .
pre_hook - вызван с аргументом ctx (читать :h comment.utils.CommentCtx ) до (не) комментария. По желанию можно вернуть commentstring , который будет использоваться для (ООН) комментариев. {
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 ,
} Вы также можете интегрировать NVIM-TS-Context-CommentsTring, используя pre_hook , чтобы легко комментировать файлы tsx/jsx .
ПРИМЕЧАНИЕ -
Comment.nvimуже поддерживаетtreesitterза пределами всех языков, кромеtsx/jsx.
{
pre_hook = require ( ' ts_context_commentstring.integrations.comment_nvim ' ). create_pre_hook (),
}post_hook - этот метод вызывается после (ООН). Комментирование. Он получает тот же аргумент ctx (Read :h comment.utils.CommentCtx ), что и 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 ,
} post_hook может быть реализован для покрытия некоторых нишевых вариантов использования, таких как следующие:
#if 0 . Смотрите пример здесь.pre_hook ) и перемещать курсор на следующий блок (с помощью post_hook ). Смотрите это.ПРИМЕЧАНИЕ. При нажатии
gc,gbи друзей,cmode(режим комментариев) внутриpre_hookвсегда будет переключаться, потому что при вызове предварительного крючка в этот момент мы не знаем, будут лиgcилиgbкомментировать или неуместить строки. Но, к счастью, мы знаем это доpost_hook, и это всегда будет получать либо комментарий, либо статус неудобства
Вы можете использовать ignore , чтобы игнорировать определенные строки во время комментариев/неудобства. Он может принимать строку REGEX LUA или функцию, которая возвращает строку Regex и должна быть предоставлена во время setup() .
Примечание: игнорируйте только работы, когда с Linewise Comment. Это по дизайну. Как игнорирование строк в блочных комментариях не имеет такого большого смысла.
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 ,
} Большинство языков/филетипов имеют собственную поддержку для комментариев через commentstring но может быть филетип, который не поддерживается. Есть два способа включить комментирование для неподдерживаемых филетипов:
commentstring для этого конкретного филетипа, как следующее. Читайте :h commentstring для получения дополнительной информации. vim . bo . commentstring = ' //%s '
-- or
vim . api . nvim_command ( ' set commentstring=//%s ' )commentstring . Читайте :h comment.ft для получения дополнительной информации. 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 (ы) могут добавить больше комментариев в плагин
Существует несколько способов внести вклад в отчеты/исправления ошибок, запросов функций. Вы также можете отправить комментарии в этот плагин, обновив ft.lua и отправив PR.
/**%s*/ (js), ///%s (ржавчина) ---- ------------------
-- This is a header --
---- ------------------