我想替换以下内容:
@todo call customer
@todo-next do foo
@todo-wait customer will call me back
@done
当我在线上使用光标时。例如:
@todo call customer
那么
@done call customer
我得到它来替换{{1}}但是对于其他两个(@ todo-next,@ todo-wait)我认为我的正则表达式无法正常工作......
继承了我得到的东西,当我开始行动时,没有发生在线上......:
@todo
答案 0 :(得分:1)
你的regexp语法错了; Vim并不了解Perlish .*?
;那个在Vim的.\{-}
。见:help perl-patterns
。 (此外,由于您要匹配尾随空格,因此您还需要在替换中包含该空格,或使用\ze
来限制匹配。)
let newline = substitute(line, "@todo.\{-} ", "@done ", "")
我可能在你的模式中限制更多,以避免错误匹配(取决于你的标记的确切语法,所以这只是一个例子):
let newline = substitute(line, "@todo\%(-\w\+\)* ", "@done ", "")
最后,不需要getline()
/ setline()
;你也可以用:substitute
做到这一点。如果你保留这个功能,这并不会破坏最后的搜索模式。要清理历史记录:call histdel('search', -1)
。