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

发布于 2024-10-31 12:48:34 字数 707 浏览 0 评论 0原文

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

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 个空行,并再次询问我是否要进行替换。

如何避免这些多个替换请求(在同一位置)?
希望我说清楚了:)

I created a function to search a custom number of empty lines (with or without spaces) and to replace them with a new (custom) number of empty lines.

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 

Let say b = 2, (2 and more) AND m = 3
If vim finds 4 empty lines it does a substitution to 3 empty lines.
(thats ok).
But when I refuse the substitution request (I use the "c" (confirm) flag) it finds at the same place 3 empty lines and asks again if it has to be replaced with 3 empty lines. When I refuse again, it finds at the same place, 2 empty lines and asks again if I want to do a substitution.

How can I avoid these multiple substitution requests (at the same place)?
Hope I made myself clear :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

掐死时间 2024-11-07 12:48:34

解决了!我只需检查前后行中是否有非空格 \S 。

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

resolved it! I just had to check for a non space \S in the line before and the line after.

My new exe = 's/^.*\S\+.*\n\zs\(^\s*$\n\)\{'.b.'}\ze\s*\S\+/'.m.'/gc
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文