Dado un grupo repetido como (...){n,m}
o (...)+
, no creo que haya forma de que Vim extraiga cada ocurrencia del grupo. Solo el último está disponible en todas las funciones y comandos relacionados con expresiones regulares -.
Dicho esto, puede usar una sustitución anidada:
:s/\v%([a-zA-Z]\s){3,}[a-zA-Z]/\=substitute(submatch(0), '\s', '', 'g')/gc
Un \=
en el reemplazo de :s
hace que Vim evalúe el reemplazo como una expresión. Y en esa expresión, estoy usando la funciónsubstitute()
para eliminar todos los espacios en todo el texto coincidente de:s
(obtenido por submatch(0)
), dando Ligh
de L i g h
.
Очевидно, я мгновенно понял ответ.
$ newFile="${mypath}newFile.sh"
touch newFile
не работает
$ newFile=${mypath}newFile.sh
touch newFile
работает
Это не работает так, как вы ожидаете, из-за порядка раскрытия.
Из руководства по bash:
The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; and pathname expansion.
В вашей первой строке ~
будет расширено, если используется без кавычек. Как бы то ни было, ~
внутри кавычек не раскрывается и не раскрывается позже, потому что раскрытие тильды выполняется до раскрытия переменной.
Вы пишете, что это работает, но тот факт, что вывод echo
равен ~/local/bin/newFile.sh
, показывает, что это не работает.
Если вам нужны кавычки, потому что значение содержит пробелы, вы можете поставить в кавычки часть после~/
:
mypath=~/"local/bin with spaces/"
newFile="${mypath}newFile.sh"
echo "$newFile"