Проблема с вашей попыткой :26s/[^a-Z0-9-]+/_/g
- a-Z
, что является недопустимым диапазоном. Это должно быть a-zA-Z
.
(A-z
будет «работать», но если вы посмотрите на таблицу ASCII , она также включает [\]^_`
, а не только буквы.)
Следующая проблема заключается в том, что +
не является метасимволом регулярных выражений в vim (по крайней мере, не по умолчанию). [^a-zA-Z0-9-]+
будет искать не буквенно-цифровой не -
символ, за которым следует литерал +
. Вместо него должно быть \+
.
Это дает нам s/[^a-zA-Z0-9-]\+/_/g
, который работает.