2015-04-07 4 views
3

Я хочу удалить «go» только в комментарии, в vi или vim. Не могли бы вы сообщить мне, как?vi vim удалить слово в специальном блоке

/* 
the following gos should be deleted: in the comment 
go 
*/ 

the following go should not be deleted 
go 


/* 
the following go should be deleted: in the comment 
go 

and some more words 
go 
*/ 

the following go should not be deleted 
go 

В результате удаления должно быть следующим:

/* 
the following gos should be deleted: in the comment 
*/ 

the following go should not be deleted 
go 


/* 
the following go should be deleted: in the comment 

and some more words 
*/ 

the following go should not be deleted 
go 

Спасибо.

+0

Вы хотите удалить все «go» s в блоке комментариев? или просто эти «идут», когда они сидят только на одной линии? пожалуйста, объясните, почему в вашем блоке комментариев все еще есть «идти» в ожидаемом результате. – Kent

ответ

2

Вы можете попробовать это:

g/\/\*/.,/\*\//s/\<go\>//g 
  • g/<pattern>/ - соответствует строкам, содержащим данный шаблон, в этом случае начала комментария
  • .,/<patter>/ - выполнить следующую бывшую команду от текущей строки к следующей строке, который соответствует шаблону, который в этом примере является концом комментария
  • s/<pattern>//g - заменяет все вхождения шаблона в каждой строке с пустой строкой
3

эта линия работает для примера:

%s#/\*\zs\_.\{-}\ze\*/#\=substitute(submatch(0),'go','','g')# 

некоторые элементы, которые вы можете посмотреть в VIM великой помощи док:

:h \zs 
:h \ze 
:h \_. 
:h /star 
:h :s\= 
:h substitute(
+1

Он также удаляет «go» в самих предложениях. Я не думаю, что это намерение OP. Следующее, я считаю, было бы ближе к тому, что OP хочет 'g/\ v \/\ * \ _. {-} \ * \ //,/\ v \ * \ // s/^ go $ \ n'. –

+0

@LievenKeersmaekers Я вижу, что в его выпуске удалены не все «go» s в комментарии .... – Kent

+0

Большое спасибо, особенно. для справки. –