fix(prompt): "%" prefix repeated on newlines with formatoptions+=r #34584

Problem:
With `formatoptions+=r`, the prompt prefix "%" is treated as
comment-start (because of global default 'comments' option contains
"%"), so it gets added to the start of the line when a new line
is input in a prompt.

Solution:
Unset the 'comments' option in prompt buffers by default.
This commit is contained in:
Shadman
2025-06-24 19:52:24 +06:00
committed by GitHub
parent 5871d26779
commit 25000be845
2 changed files with 20 additions and 1 deletions

View File

@ -696,8 +696,11 @@ const char *did_set_buftype(optset_T *args)
|| opt_strings_flags(buf->b_p_bt, opt_bt_values, NULL, false) != OK) {
return e_invarg;
}
// buftype=prompt: set the prompt start position to lastline.
// buftype=prompt:
if (buf->b_p_bt[0] == 'p') {
// Set default value for 'comments'
set_option_direct(kOptComments, STATIC_CSTR_AS_OPTVAL(""), OPT_LOCAL, SID_NONE);
// set the prompt start position to lastline.
pos_T next_prompt = { .lnum = buf->b_ml.ml_line_count, .col = 1, .coladd = 0 };
RESET_FMARK(&buf->b_prompt_start, next_prompt, 0, ((fmarkv_T)INIT_FMARKV));
}

View File

@ -273,6 +273,22 @@ describe('prompt buffer', function()
{1:~ }|*3
{5:-- INSERT --} |
]])
-- % prompt is not repeated with formatoptions+=r
source([[
bwipeout!
set formatoptions+=r
set buftype=prompt
call prompt_setprompt(bufnr(), "% ")
]])
feed('iline1<s-cr>line2')
screen:expect([[
other buffer |
% line1 |
line2^ |
{1:~ }|*6
{5:-- INSERT --} |
]])
end)
it('can put (p) multiline text', function()