Значение в регистре b не отличается от значения в регистре a , поскольку ваше регулярное выражение не соответствует.
- Вам нужно написать группирующие скобки и открывающую фигурную скобку с обратными слешами.
См :help /magic
; фактически опция magic всегда включена для substitute()
регулярных выражений.
\s
соответствует только SP и TAB (не LF); но \_s
включает LF (альтернативно, вы можете использовать \n
, чтобы просто соответствовать LF).
- Вам нужно привязать конец выражения, чтобы
\{-}
не «сдавался», не сопоставляя ничего (все, кроме начальных символов новой строки, не соответствует и, следовательно, не заменяется входной строкой).
Вот модифицированная версия вашей замены:
:let @b = substitute(@a,'\_s*\(.\{-}\)\_s*$','\1','')
Может быть проще подумать об удалении начальных и конечных пробелов вместо сопоставления всего между ними. Это можно сделать за одну подстановку с помощью модификатора замещения g
(многократные подстановки) с регулярным выражением, в котором используется оператор чередования , где одна альтернатива привязана к началу строки (%^
) а другой привязан к концу строки (%$
).
substitute(@a,'\v%^\_s+|\_s+%$','','g')
Это регулярное выражение использует \v
, чтобы избежать необходимости добавлять обратную косую черту для %^
, +
, |
и %$
.
Измените оба вхождения с \_s
на \n
, если вы просто хотите обрезать начальные / конечные символы новой строки (вместо SP, TAB или NL).