1
0
forked from aniani/vim

runtime(comment): commenting might be off by one column

getpos columns start at 1 and not 0 as do arrays

closes: #15774

Signed-off-by: Konfekt <Konfekt@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Konfekt
2024-10-01 20:02:15 +02:00
committed by Christian Brabandt
parent 47f8584a80
commit e021f39b79
2 changed files with 12 additions and 7 deletions

View File

@@ -22,13 +22,13 @@ export def Toggle(...args: list<string>): string
var cms_l = split(escape(cms, '*.'), '\s*%s\s*') var cms_l = split(escape(cms, '*.'), '\s*%s\s*')
var first_col = indent(lnum1) var first_col = indent(lnum1)
var start_col = getpos("'[")[2] var start_col = getpos("'[")[2] - 1
if len(cms_l) == 1 && lnum1 == lnum2 && first_col < start_col if len(cms_l) == 1 && lnum1 == lnum2 && first_col < start_col
var line_start = getline(lnum1)[0 : max([0, start_col - 2])] var line_start = getline(lnum1)[0 : start_col - 1]
var line_end = getline(lnum1)[start_col - 1 : -1] var line_end = getline(lnum1)[start_col : -1]
line_end = line_end =~# $'^\s*{cms_l[0]}' ? line_end = line_end =~ $'^\s*{cms_l[0]}' ?
\ substitute(line_end, $'^\s*\zs{cms_l[0]}', '', '') : \ substitute(line_end, $'^\s*\zs{cms_l[0]}\s\ze\s*', line_end =~ '^\s' ? ' ' : '', '') :
\ printf(substitute(cms, '%s\@!', '%%', 'g'), line_end) \ printf(substitute(cms, '%s\@!', '%%', ''), line_end)
setline(lnum1, line_start .. line_end) setline(lnum1, line_start .. line_end)
return '' return ''
endif endif

View File

@@ -1,4 +1,4 @@
*comment.txt* For Vim version 9.1. Last change: 2024 Sep 30 *comment.txt* For Vim version 9.1. Last change: 2024 Oct 01
VIM REFERENCE MANUAL VIM REFERENCE MANUAL
@@ -38,6 +38,11 @@ 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 a comment marker, the line will be un-commented, if it doesn't, the line will
be commented out. Blank and empty lines are ignored. be commented out. Blank and empty lines are ignored.
The value of 'commentstring' is the same for the entire buffer and determined
by its filetype (|filetypes|). To adapt it within the buffer for embedded
languages, you can use a plug-in such as
https://github.com/suy/vim-context-commentstring.
The comment marker will always be padded with blanks whether or not the The comment marker will always be padded with blanks whether or not the
'commentstring' value contains whitespace around "%s". 'commentstring' value contains whitespace around "%s".