Hi Steven,
answering the last question seems to be a good way to put all together
in a simpler way so let's back on your clever pseudocode, I'll add
comments on this.
Short anwser is:
* ArgIndent does exactly what your pseudocode expects
* you need *both* 'ci and 'ai to be turned on
* CTRL_D and CTRL_T is the way to increment/decrement manually
  in insert mode. >> and << in normal mode.
Long anwser: inoremap \<cr> to ArgIndent does exactly what your
pseudocode want but in a different way
> if (Enter is pressed after a single backslash)
	=> inoremap \<cr>
> preserve the indentation and alignment of the previous line
	=> 'ai and 'ci must be set
> * go to new line
> * add spaces to align to the second word in the previous line
> # word: anything that is not white space
let's rewrite ArgIndent in vim9script and add comments
command -nargs=0 ArgIndent {
	y | put # yyp in normal mode # stage 1
	s!\v^\s+\zs(\S+\s+).*!\=repeat(' ', 1 + len(submatch(1)))!
}
at the end of the stage 1, we have
		    this --example \
		    this --example \
and we want to remove 'this' which is a substitution from
this
	\v^\s+\zs(\S+\s+).*
to this
	\=repeat(' ', 1 + len(submatch(1)))
in details:
	\v        # use "perlish/extended" regexp syntax
	^         # the begin of the line
	\s+       # at least one space|tab|nbsp
	\zs       # start matching there
	          # so previous chars will remain untouched
	(\S+\s+)  # capture a word "\S+" and the spaces after "\s+"
	.         # then the rest of the line
so in
		    this --example \
* 'this' is the word (submatch(1))
* '--example \' is the rest of the line
so the matched section is 'this --example \' and we replace it by
as many spaces as chars in in the word + 1
	1 + len(submatch(1))
	=> 1 + len("this")
	=> 1 + 4
	=> 5
	repeat(' ', 5 )
	=> '     '
so
		    this --example \
becomes
		         --example \
don't hesitate to ask if I wasn't clear.
regards
-- 
Marc Chantreux
Pôle CESAR (Calcul et services avancés à la recherche)
Université de Strasbourg
14 rue René Descartes,
BP 80010, 67084 STRASBOURG CEDEX
03.68.85.60.79
-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
--- 
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/vim_use/Z90Yb_gGzIXOCAdd%40prometheus.
Friday, March 21, 2025
Subscribe to:
Post Comments (Atom)
 
No comments:
Post a Comment