2015-10-30 4 views
1

Я попытался, используя следующий синтаксис, в Vim найти n-й вхождение слова (я хотел бы заменить это слово с другим)Vim, найти n-й вхождение слова

:6:myWord 

и я хотел бы его заменить newWord

Я не понимаю, что я ошибаюсь, может кто-нибудь мне помочь?

+2

(1) Открыть файл с 'vim', (2) тип' 6/myWord', а затем (3) нажмите Enter. В визуальном режиме ввод числа, за которым следует команда, выполняет эту команду столько раз. Таким образом, это выполняет '/ myWord' 6 раз, что находит 6-е появление' myWord'. – lurker

ответ

1
s/\%(\(myWord\).\{-}\)\{6}\zs\1/newWord/ 
     ^   ^   ^
      Pattern  Occurrence Replace pattern 

Он заменит шестое появление myWord на newWord.

+0

круто !! (+1), но: он заменяет 7-ю oco в одной строке. ': 1s/\ v% ((myWord) \ _. {-}) {5} \ zs \ 1/newWord /' – JJoao

0

Gnu-sed Это не ответ на вопрос: это просто альтернативный способ изменения n-го появления. Для правильного ответа см. Ответ @ sureshkumar и комментарий @ lurker.

sed -z -i.bak s/myWord/newWord/6 file 

где:

-i.bak infile editing (creating file.bak as a bakup) 
-z  null separeted registers (all file = one register) (gnu sed) 
/6  6'th occurence 
+0

Пожалуйста, внимательно прочитайте вопрос. Вопрос в редакторе vim мы должны заменить не в командной строке. –

+0

@sureshkumar, это не предназначалось для правильного ответа ... (я добавил отказ от него). Конечно, мы можем: ':%! Sed -z s/myWord/newWord/6' – JJoao

+0

-z опция отсутствует в команде sed. –

Смежные вопросы