2016-02-11 9 views
0

Пример:действие флаг подтверждения в течение цикла

"create list of only certain linenumbers 
    .... 

    "take action on these linenumbers 
    for i in range(0,len(mylist)-1) 

    exe mylist[i].'s/(mysearch)/\=substitute(submatch(0), ".", "", "ge")/gc' 

    endfor 

Подтверждение флаг отлично работает, если я использую y или n, но не работает, когда я использую a или q, потому что он находится в пределах для цикла.
Как я могу захватить флаг a и q в диалоге подтверждения и выполнить его на весь цикл:
a --> do a substitute for all other lines in for loop
q --> end for loop

(я когда-то просил что-то подобное, но не нашел решения)

ответ

1

Я собирался использовать :global, чтобы заполнить ваши номера строк, но он имеет тот же результат. Вместо этого, вы можете сделать это

exe '%s#\v('.join(map(copy(lines), '"%".v:val."l"'), '|').')\zsPATTERN#REPL#gc' 

Ключом к решению является :h /\%l, чтобы ограничить матчи к определенным строкам.

+0

Привет, Люк, я не очень хорошо понимаю ваш ответ. Мои простыни на самом деле находятся в списке «mylist», когда я нажимаю p.e. 3 раза 'y' на моей клавиатуре для 3 замен и хотите изменить все остальные ('a'), как я могу адаптировать ваше решение? – Reman

+0

Вам просто нужно изменить 'PATTERN' на то, что вы заменяете, и' REPL' тем, что вы хотите вставить вместо этого. Я все еще использую ': substitute'. Просто я использую карту и присоединяюсь, чтобы составить список в очень конкретный ведущий образец. Попробуйте использовать 'echo' вместо' exe', чтобы увидеть, что делает команда. –

+0

Я не могу адаптировать это решение, потому что у меня есть команда substitute в цикле for с гораздо большим количеством кода. Я хотел бы найти что-то вроде «если пользователь нажал« a »-> изменить подзаголовок с« gc »на« g »и« если пользователь нажал «q» -> break for loop » – Reman

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

  • Нет связанных вопросов^_^