ВИМ: Как избежать замены в рамках замены? - PullRequest
0 голосов
/ 11 апреля 2011

Я создал функцию для поиска произвольного числа пустых строк (с пробелами или без пробелов) и замены их новым (произвольным) числом пустых строк.

fun! s:AddRemoveNumbEmptyLines()

if !exists("emptylinesbefore")
  let emptylinesbefore = "How many empty lines do you search? \n (p.e. 2,3  4,  ,3)"
endif  
let b = inputdialog(emptylinesbefore)

if !exists("emptylinesafter")
   let emptylinesafter = "How many empty lines must it be?"
endif  
let c = inputdialog(emptylinesafter)

let m = repeat('\r', c)
exe 's/\(^\s*$\n\)\{'.b.'}/'.m.'/gc'
endfun 

Пусть, скажем, b = 2, (2 и более) И m = 3
Если vim находит 4 пустые строки, он подменяет 3 пустые строки.
(это нормально).
Но когда я отклоняю запрос на замену (я использую"c" (подтвердить) флаг) он находит в том же месте 3 пустых строки и снова спрашивает, нужно ли его заменить 3 пустыми строками.Когда я снова отказываюсь, он находит в том же месте 2 пустые строки и снова спрашивает, хочу ли я выполнить замену.

Как можно избежать этих нескольких запросов на замену (в одном и том же месте)?
Надеюсь, я все прояснил :)

1 Ответ

0 голосов
/ 24 июля 2013

решено! Я просто должен был проверить наличие пробела \ S в строке до и после строки

My new exe = 's/^.*\S\+.*\n\zs\(^\s*$\n\)\{'.b.'}\ze\s*\S\+/'.m.'/gc
...