-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 On 24-Nov-2017 15:13 +0100, Christian Brabandt wrote: > > On Fr, 24 Nov 2017, Marius Gedminas wrote: > >> On Fri, Nov 24, 2017 at 11:30:03AM +0100, Christian Brabandt >> wrote: >>> Hi, while writing the test for checking the URLs I stumbled on >>> this difference between submatch(1) and \1: #v+ let a = ' >>> https://www.vim.org ' let g:pat = '.\{-}\(http[^ ]*\).\{-}$' >>> echo substitute(a, g:pat, submatch(1), '') echo substitute(a, >>> g:pat, '\1', '') #v- >>> >>> If you execute this piece of script, the first map() returns an >>> empty list, while the second map() returns the URL stripped by >>> whitespace (which would be my expected behaviour for both map() >>> calls). >>> >>> Is this expected? >> >> You're calling submatch(1) and then passing the returned value to >> substitute(). Try >> >> echo substitute(a, g:pat, '\=submatch(1)', '') >> >> or >> >> echo substitute(a, g:pat, {m->submatch(1)}, '') >> >> or >> >> echo substitute(a, g:pat, {m->m[1]}, '') > > It is only valid in a expression context of the replace part in the > substitute() function? That is not how I read the help. That > should be stressed some more (or generate an error, if this is > generally invalid perhaps?)
:help submatch() mentions right at the beginning: ,---- | Only for an expression in a |:substitute| command or | substitute() function. `---- When you invoke substitute(a, g:pat, submatch(1), ''), you _first_ evaluate submatch() as an argument to be passed to the substitute() function, so it's clearly outside of the substitution context. You have to use a String expression or lambda, as Marius has shown. I'm not sure whether an error is called for here; the programming error should be pretty obvious when testing, anyway. Have you been working in a different programming language recently? I find these things (variable interpolation and :execute is another such area) natural as long as I'm working in Vimscript; but then they suddenly appear odd when coming from a different language. - -- regards, ingo -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAEBCAAGBQJaGDmgAAoJEA7ziXlAzQ/vnQcH/3FkOVsJnN2dEX5GUAR0gqur MiMvrmsBqdyVZ9x53drmiNnO6ak024A71ugrNoKZ5h+ivli7rW1KXrzNMfK2fhoJ RhkWsMoeGi2qJ75uQp4azOS/5ekuwQRNr0eNFjWEmukKb7rBcXEXQ2LbJz1d65+r BiIP8CiCknxO2v00+yhIMCd5Qhcm5s783M5VgPNefUC6yHx/p2+DIGpztkUPeXRL rnYatuGxhhCalxTSrKpRBkLTKvolehQyv16zv/LnV3QbC3tBJrgkNopvlVfA4hCg 51X3M1rubqUf7DjUMXwhwXmoZr1M6V1/ehrLdbfLIQzNmPRblU5lMgU4S5XuxL0= =nNPp -----END PGP SIGNATURE----- -- -- You received this message from the "vim_dev" 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_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
