通过vimscript替换正则表达式

时间:2014-10-06 09:49:17

标签: regex vim

我想替换以下内容:

@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

1 个答案:

答案 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)