Я хочу написать средство исправления для эля, чтобы удалить все пробелы в конце строки, кроме двойного пробела - в уценке это используется для создания разрыва строки.

Мне нужно сопоставить «в конце строки 1 или несколько пробелов, а не 2 пробела»

Вроде как \s\+$\&\s\{^2}$ за исключением того, что ^ не является отрицанием внутри фигурных скобок. Некоторые поисковые запросы показывают, что отрицание количества метасимволов кажется особенно нишевой проблемой.

2
John 20 Май 2021 в 11:43

2 ответа

Лучший ответ

Ты можешь использовать

:%s/\v(\s)@<!\s(\s{2,})?$//g

Подробности

  • % - поиск по всем строкам
  • s - заменить
  • \v - очень волшебный режим
  • (\s)@<! - местоположение, которое сразу не начинается с пробела
  • \s - пробел
  • (\s{2,})? - необязательное появление двух или более пробелов
  • $ - конец строки
  • g - все вхождения в строке.

Это как работает это регулярное выражение (переведено на PCRE).

2
Wiktor Stribiżew 20 Май 2021 в 09:03

(Это действительно должен быть комментарий, но здесь важно форматирование)

Как вы хотите, чтобы следующий фрагмент кода выглядел после того, как вы его «исправили» (пробелы, отмеченные _)?

First line, without trailing spaces
Second line, with one trailing space_
Third line, with two trailing spaces__
Fourth line, with more than two trailing spaces______
0
romainl 20 Май 2021 в 08:56