Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 维姆:如何避免替换中的替换?_Vim_Substitution - Fatal编程技术网

Vim 维姆:如何避免替换中的替换?

Vim 维姆:如何避免替换中的替换?,vim,substitution,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 !ex

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

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个空行替换。当我再次拒绝时,它会在同一个地方找到两行空行,并再次询问我是否要进行替换

我怎样才能避免在同一地点发生这些多次替换请求?
希望我说清楚:

解决了!我只需要检查前一行和后一行中是否有非空格

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

可能使用%s而不是s?正常情况下,它应该可以工作,但不会在无限循环中递归。@Benoit,是的,我也用%s检查了它,并“解决了它!”!我只需要检查前一行和后一行中是否有非空格。我的新exe='s/^.*\s\+.*\n\zs\^\s*$\n\\\{.b.}\ze\s*\s\+/'.m./gc您应该将您的解决方案作为答案发布并接受它,这样人们和机器就会知道这个问题已经得到了回答。