Удалить EOL пробелы выделения, только если есть - PullRequest
1 голос
/ 21 марта 2012

Как проверить, есть ли в выделении пробелы EOL, и удалить их, только если они есть?

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

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Вы можете подавить ошибки в команде :substitute, используя флаг e.Таким образом, предложение eckes будет:

:'<,'>s/\ \+$//ge

Тогда любые ошибки игнорируются, и сценарии не прерываются.См. :help s_flags для получения дополнительной информации.

Если вы действительно хотите проверить наличие пробелов, вы можете попробовать использовать что-то вроде

if matchstr(getline("."),'\s\+$') == ""
    " there is no trailing whitespace
else
    " there is some trailing whitespace
endif
1 голос
/ 21 марта 2012

Если вы хотите удалить все пробелы, самая короткая команда, вероятно, будет

:%s/\s*$//

% относится ко всему буферу

с заменитель

/ \ s * $ соответствует любому пробелу с последующим концом строки

// заменить совпадения пустым1018 *

1 голос
/ 21 марта 2012

Пока выбор активен (визуальный режим), просто наберите

:s/\ \+$//g

В командной строке это станет

'<,'>s/\ \+$//g

Hit Enter , missionзавершено.

Если есть нет конечных пробелов, будет выдано сообщение об ошибке (E486), но это не проблема.


Редактировать 1:
Чтобы быть уверенным в том, что вы применяете подстановку только в тех случаях, когда действительно имеются конечные пробелы, вы можете добавить префикс :s к :g:

:g/\ \+$/s/\ \+$//g

Хитрость :g заключается в том, что она применяет данную команду (s/\ \+$//g) только к тем строкам, которые соответствуют данному шаблону.


Edit 2:
Все становится еще короче, , как я недавно узнал :

:g/\s\+$/s///g
...