Vim: сопоставьте пробелы в конце строки, но не строки, состоящие из одного пробела

#regex #vim #diff #removing-whitespace

#регулярное выражение #vim #разница #удаление-пробел

Вопрос:

Я понимаю, что в vim я могу выделить конечные пробелы в конце строки, используя

 match /s $/
 

Теперь я хотел бы исключить из сопоставления те строки, которые содержат ровно один пробел. Как мне это сделать? (Это не обязательно должна быть одна строка / регулярное выражение.)

Ответ №1:

match /(Szss $)|(^s{2,}$)/

Это должно сработать — разбить его на 2 раздела

Часть 1 — поиск пробелов в конце строки, в которой есть другие элементы: (Szss $)
не пробел S ,
затем начните сопоставление zs ,
1 или более пробелов в конце строки s $

ИЛИ сопоставьте |

Часть 2 — Поиск более одного пробела, который является всей строкой: (^s{2,}$)
начните с начала строки ^
поиск не менее 2 пробелов s{2,}
в конце строки $

Комментарии:

1. Да! Удивительно, именно то, на что я надеялся, большое спасибо! Кроме того, спасибо за объяснение. 🙂

2. Также рассмотрим более короткое регулярное выражение : (^ $)@!amp;s $ .

3. @ib. — хорошо, я поиграл с @ и amp; и не смог заставить их работать правильно.

Ответ №2:

Это сопоставляет все строки, содержащие более одного пробела, исключая строки, содержащие один пробел.

 match /ss $/
 

Комментарии:

1. Мне нравится эта идея, но это также скроет одиночные пробелы в конце обычных строк, которые состоят не только из пробела.