]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(rst): Preserve indentation of directives
authorMarshall Ward <marshall.ward@gmail.com>
Mon, 13 Oct 2025 18:37:59 +0000 (18:37 +0000)
committerChristian Brabandt <cb@256bit.org>
Mon, 13 Oct 2025 18:40:16 +0000 (18:40 +0000)
This patch preserves indentation in comments.  It work by removing the
explicit 3-space indentation and replaces with with an expression which
uses the current value with a minimum of three spaces.

Discussed in the mailing list:

    https://groups.google.com/g/vim_dev/c/rn8ZLDrCbYU

Thanks to Friedrich Romstedt for reporting and Christian Brabandt for
investigating the issue.

closes: #18566

Signed-off-by: Marshall Ward <marshall.ward@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/indent/rst.vim

index e3c10865a680f90e2d5cb4392d1792f84114be90..e10079213b1ac9125f14dd094151b7d346c56ccf 100644 (file)
@@ -4,13 +4,18 @@
 " Maintainer: Marshall Ward <marshall.ward@gmail.com>
 " Previous Maintainer: Nikolai Weibull <now@bitwi.se>
 " Latest Revision: 2020-03-31
-"                  2023 Aug 28 by Vim Project (undo_indent)
+" 2023 Aug 28 by Vim Project (undo_indent)
+" 2025 Oct 13 by Vim project: preserve indentation #18566
 
 if exists("b:did_indent")
   finish
 endif
 let b:did_indent = 1
 
+" Save and modify cpoptions
+let s:save_cpo = &cpo
+set cpo&vim
+
 setlocal indentexpr=GetRSTIndent()
 setlocal indentkeys=!^F,o,O
 setlocal nosmartindent
@@ -27,7 +32,8 @@ let s:note_pattern = '^\.\. '
 
 function! s:get_paragraph_start()
     let paragraph_mark_start = getpos("'{")[1]
-    return getline(paragraph_mark_start) =~ '\S' ? paragraph_mark_start : paragraph_mark_start + 1
+    return getline(paragraph_mark_start) =~
+        \ '\S' ? paragraph_mark_start : paragraph_mark_start + 1
 endfunction
 
 function GetRSTIndent()
@@ -42,7 +48,7 @@ function GetRSTIndent()
   let psnum = s:get_paragraph_start()
   if psnum != 0
       if getline(psnum) =~ s:note_pattern
-          let ind = 3
+          let ind = max([3, ind])
       endif
   endif
 
@@ -75,3 +81,7 @@ function GetRSTIndent()
 
   return ind
 endfunction
+
+" Restore 'cpoptions'
+let &cpo = s:save_cpo
+unlet s:save_cpo