Найдите шаблон и удалите слово с этим шаблоном в Vim

#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 должно сработать.