Commit: runtime(rst): Preserve indentation of directives

0 views
Skip to first unread message

Christian Brabandt

unread,
2:45 PM (8 hours ago) 2:45 PM
to vim...@googlegroups.com
runtime(rst): Preserve indentation of directives

Commit: https://github.com/vim/vim/commit/64c8105867ae6342b632246ac5430a59521e740d
Author: Marshall Ward <marsha...@gmail.com>
Date: Mon Oct 13 18:37:59 2025 +0000

runtime(rst): Preserve indentation of directives

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 <marsha...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/indent/rst.vim b/runtime/indent/rst.vim
index e3c10865a..e10079213 100644
--- a/runtime/indent/rst.vim
+++ b/runtime/indent/rst.vim
@@ -4,13 +4,18 @@
" Maintainer: Marshall Ward <marsha...@gmail.com>
" Previous Maintainer: Nikolai Weibull <n...@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
Reply all
Reply to author
Forward
0 new messages