]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(comment): commenting might be off by one column
authorKonfekt <Konfekt@users.noreply.github.com>
Tue, 1 Oct 2024 18:02:15 +0000 (20:02 +0200)
committerChristian Brabandt <cb@256bit.org>
Tue, 1 Oct 2024 18:02:15 +0000 (20:02 +0200)
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>
runtime/pack/dist/opt/comment/autoload/comment.vim
runtime/pack/dist/opt/comment/doc/comment.txt

index 6617136e638e4a6f7c02168559218b3ba3620289..c758a7d40323d3b72bba0aa8532460cbe3947cbd 100644 (file)
@@ -22,13 +22,13 @@ export def Toggle(...args: list<string>): string
     var cms_l = split(escape(cms, '*.'), '\s*%s\s*')
 
     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
-        var line_start = getline(lnum1)[0 : max([0, start_col - 2])]
-        var line_end = getline(lnum1)[start_col - 1 : -1]
-        line_end = line_end =~# $'^\s*{cms_l[0]}' ?
-                    \ substitute(line_end, $'^\s*\zs{cms_l[0]}', '', '') :
-                    \ printf(substitute(cms, '%s\@!', '%%', 'g'), line_end)
+        var line_start = getline(lnum1)[0 : start_col - 1]
+        var line_end = getline(lnum1)[start_col : -1]
+        line_end = line_end =~ $'^\s*{cms_l[0]}' ?
+                    \ substitute(line_end, $'^\s*\zs{cms_l[0]}\s\ze\s*', line_end =~ '^\s' ? ' ' : '', '') :
+                    \ printf(substitute(cms, '%s\@!', '%%', ''), line_end)
         setline(lnum1, line_start .. line_end)
         return ''
     endif
index af1251a07b1c4cb656df830468f746fbd3f66fa9..2bd874101c72bb72d6cd3e713b13328291101714 100644 (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
@@ -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
 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
 'commentstring' value contains whitespace around "%s".