runtime(comment): include a simple comment toggling plugin

fixes #14626
closes: #14634

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Maxim Kim
2024-04-26 19:53:13 +02:00
committed by Christian Brabandt
parent 00ae5c5cba
commit 5400a5d426
8 changed files with 147 additions and 2 deletions

1
.github/CODEOWNERS vendored
View File

@ -316,6 +316,7 @@ runtime/lang/menu_ru_ru.cp1251.vim @RestorerZ
runtime/lang/menu_ru_ru.koi8-r.vim @RestorerZ
runtime/lang/menu_ru_ru.utf-8.vim @RestorerZ
runtime/pack/dist/opt/cfilter/plugin/cfilter.vim @yegappan
runtime/pack/dist/opt/comment/ @habamax
runtime/pack/dist/opt/matchit/ @chrisbra
runtime/plugin/manpager.vim @Konfekt
runtime/syntax/shared/hgcommitDiff.vim @vegerot

View File

@ -755,6 +755,10 @@ RT_ALL = \
runtime/tutor/tutor.vim \
runtime/vimrc_example.vim \
runtime/pack/dist/opt/cfilter/plugin/cfilter.vim \
runtime/pack/dist/opt/comment/plugin/comment.vim \
runtime/pack/dist/opt/comment/doc/comment.txt \
runtime/pack/dist/opt/comment/doc/tags \
runtime/pack/dist/opt/comment/autoload/comment.vim \
runtime/pack/dist/opt/dvorak/plugin/dvorak.vim \
runtime/pack/dist/opt/dvorak/dvorak/enable.vim \
runtime/pack/dist/opt/dvorak/dvorak/disable.vim \

View File

@ -6515,6 +6515,7 @@ command-block vim9.txt /*command-block*
command-line-functions usr_41.txt /*command-line-functions*
command-line-window cmdline.txt /*command-line-window*
command-mode intro.txt /*command-mode*
comment-install usr_05.txt /*comment-install*
compatible-default starting.txt /*compatible-default*
compile-changes-5 version5.txt /*compile-changes-5*
compile-changes-6 version6.txt /*compile-changes-6*

View File

@ -1,4 +1,4 @@
*usr_05.txt* For Vim version 9.1. Last change: 2023 Sep 12
*usr_05.txt* For Vim version 9.1. Last change: 2024 Apr 26
VIM USER MANUAL - by Bram Moolenaar
@ -436,6 +436,18 @@ when Vim starts, add the following line to your vimrc file: >
After restarting your Vim, the plugin is active and you can read about it at: >
:h editorconfig.txt
Adding comment package *comment-install*
Load the plugin with this command: >
packadd comment
<
This way you can use the plugin with the default key bindings `gc` and similar
for commenting (which is a well-established mapping in the Vim community).
After restarting your Vim, the plugin is active and you can read about it at: >
:h comment.txt
More information about packages can be found here: |packages|.
==============================================================================

View File

@ -1,4 +1,4 @@
*version9.txt* For Vim version 9.1. Last change: 2024 Apr 14
*version9.txt* For Vim version 9.1. Last change: 2024 Apr 26
VIM REFERENCE MANUAL by Bram Moolenaar
@ -41554,6 +41554,7 @@ Enum support for Vim9 script |:enum|
Other improvements *new-other-9.2*
------------------
The comment plugin |comment-install| is included.
Changed *changed-9.2*
-------

View File

@ -0,0 +1,58 @@
vim9script
# Maintainer: Maxim Kim <habamax@gmail.com>
# Last Update: 2024-04-26
#
# Toggle comments
# Usage:
# Add following mappings to vimrc:
# import autoload 'dist/comment.vim'
# nnoremap <silent> <expr> gc comment.Toggle()
# xnoremap <silent> <expr> gc comment.Toggle()
# nnoremap <silent> <expr> gcc comment.Toggle() .. '_'
export def Toggle(...args: list<string>): string
if len(args) == 0
&opfunc = matchstr(expand('<stack>'), '[^. ]*\ze[')
return 'g@'
endif
if empty(&cms) || !&ma | return '' | endif
var cms = substitute(substitute(&cms, '\S\zs%s\s*', ' %s', ''), '%s\ze\S', '%s ', '')
var [lnum1, lnum2] = [line("'["), line("']")]
var cms_l = split(escape(cms, '*.'), '\s*%s\s*')
if len(cms_l) == 0 | return '' | endif
if len(cms_l) == 1 | call add(cms_l, '') | endif
var comment = 0
var indent_min = indent(lnum1)
var indent_start = matchstr(getline(lnum1), '^\s*')
for lnum in range(lnum1, lnum2)
if getline(lnum) =~ '^\s*$' | continue | endif
if indent_min > indent(lnum)
indent_min = indent(lnum)
indent_start = matchstr(getline(lnum), '^\s*')
endif
if getline(lnum) !~ $'^\s*{cms_l[0]}.*{cms_l[1]}$'
comment = 1
endif
endfor
var lines = []
var line = ''
for lnum in range(lnum1, lnum2)
if getline(lnum) =~ '^\s*$'
line = getline(lnum)
elseif comment
if exists("g:comment_first_col") || exists("b:comment_first_col")
# handle % with substitute
line = printf(substitute(cms, '%s\@!', '%%', 'g'), getline(lnum))
else
# handle % with substitute
line = printf(indent_start .. substitute(cms, '%s\@!', '%%', 'g'),
strpart(getline(lnum), strlen(indent_start)))
endif
else
line = substitute(getline(lnum), $'^\s*\zs{cms_l[0]} \?\| \?{cms_l[1]}$', '', 'g')
endif
add(lines, line)
endfor
noautocmd keepjumps setline(lnum1, lines)
return ''
enddef

View File

@ -0,0 +1,59 @@
*comment.txt* For Vim version 9.1. Last change: 2024 Apr 26
VIM REFERENCE MANUAL
Commenting and un-commenting text.
==============================================================================
The comment.vim package, allows to toggle comments for a single line, a range
of lines or a selected text object. It defines the following mappings:
*gcc*
gcc to comment/uncomment current line
*o_gc*
gc{motion} to toggle comments for the selected motion
*gcip*
gcip to comment/uncomment current paragraph
*gcG*
gcG to comment/uncomment from current line till the end of a buffer
*v_gc*
{Visual}gc to comment/uncomment the highlighted lines.
The plugin uses the buffer-local 'commentstring' option value to add or remove
comment markers to the selected lines. Whether it will comment or un-comment
depends on the first line of the range of lines to act upon. When it matches
a comment marker, the line will be un-commented, if it doesn't, the line will
be commented out. Blank and empty lines are not touched.
If the mapping does not seem to work, chances are high, that this particular
filetype is either not detected by Vim or the filetype plugin does not set the
'commentstring' option.
You can simply configure this using the following autocommand (e.g. for legacy
Vim script): >
autocmd Filetype vim :setlocal commentstring="\ %s
This example sets the " as start of a comment for legacy Vim Script. For Vim9
script, you would instead use the "#" char: >
autocmd Filetype vim :setlocal commentstring=#\ %s
==============================================================================
Options:
*g:comment_first_col*
*b:comment_first_col*
By default comment chars are added in front of the line, i.e. if the line
was indented, commented line would stay indented as well.
However some filetypes require a comment char on the first column, use this option
to change default behaviour.
Use g:comment_first_col to change it globally or b:comment_first_col to
target specific filetype(s).
==============================================================================
vim:tw=78:ts=8:fo=tcq2:ft=help:

View File

@ -0,0 +1,9 @@
vim9script
# Maintainer: Maxim Kim <habamax@gmail.com>
# Last Update: 2024-04-26
import autoload 'comment.vim'
nnoremap <silent> <expr> gc comment.Toggle()
xnoremap <silent> <expr> gc comment.Toggle()
nnoremap <silent> <expr> gcc comment.Toggle() .. '_'