#vim
Вопрос:
Как удалить слово с определенным шаблоном/ключевым словом в Vim?
Например, если у меня есть файл, как показано ниже:
BB[0]:L BB[0]:R BB[1]:L BB[1]:R BB[2]:L BB[2]:R BB[3]:L BB[3]:R BB[4]:L BB[4]:R BB[5]:L
Мне нужно удалить все слова с ключевым :L
словом .
В качестве вывода мне нужно что — то вроде этого:
BB[0]:R BB[1]:R BB[2]:R BB[3]:R BB[4]:R
Комментарии:
1. Если на ваши вопросы дан ответ, пожалуйста, примите его.
Ответ №1:
Этого можно достичь либо с помощью замены регулярного выражения, либо путем записи макроса.
Это регулярное выражение соответствует PATTERN
, окруженное любым количеством символов без пробелов (жадное). Более точной была бы последовательность символов без границ слов ( B
), но, насколько я знаю, этого в vim не существует.
%s/S*PATTERNS*//g
Другой вариант-записать макрос и удалить это слово:
/pattern (search pattern)
qq (record macro into register q)
daw (delete a word)
n (goto next match)
q (stop recording makro)
1000@q (replay macro 1000 times)
Вы также можете попробовать diw
или daW
вместо daw
этого . Для каждой мнемоники () доступны разделы справки vim :help diw
.
Комментарии:
1.
S
является атомом без пробелов. например%s/S :L//
. Хитрость заключалась бы в том, чтобы удалить оставшиеся пробелы,%s/%(sS :L|S :Ls)//
2. @PeterRincker, Для этого потребуется символ без пробелов перед шаблоном, не так ли? В ОП не говорилось, как следует удалять пробелы. Макрос может быть проще, когда дело доходит до удаления дополнительных пробелов.
3. Просто чтобы добавить к этому ответу, @Srikarthik Kadapa может выполнить задачу с помощью
:%s/S*:L/*S//g
.4. @RajKumarMishra: Вы имеете в виду, в его примере? Ваш шаблон не работает.
:
не нужно убегать, их/
слишком много, вы перепутали порядокS*
. @SrikarthikKadapa должен просто заменить «ШАБЛОН» в моей команде на «:L» или каков бы ни был его шаблон — или используйте макрос.5. @steffen спасибо, что поправил меня. Я все испортил.
:%s/S*:LS*//g
должно сработать.