VIM:如何避免替代内的替代?

时间:2011-04-11 08:02:12

标签: vim substitution

我创建了一个函数来搜索自定义数量的空行(带或不带空格),并用新的(自定义)空行数替换它们。

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和更多)AND m = 3
如果vim找到4个空行,则替换为3个空行 (没关系)。
但是当我拒绝替换请求(我使用“c”(确认)标志)时,它在同一个地方找到3个空行并再次询问它是否必须用3个空行替换。当我再次拒绝时,它会在同一个地方找到2个空行并再次询问是否要进行替换。

如何避免这些多次替换请求(在同一个地方)? 希望我明白自己:)

1 个答案:

答案 0 :(得分:0)

解决了!我只需检查前一行中的非空格\ S和之后的行。

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