如何抽出与模式匹配的文本?

时间:2016-06-10 13:35:04

标签: vim

我正在尝试对搜索模式执行操作,但我无法弄清楚如何执行此操作。这里的目标是能够拉出一个模式,但到目前为止我只能拉一整行。是否有一个技巧可以使此命令仅在匹配的模式上运行?

:/pattern.*/v

2 个答案:

答案 0 :(得分:6)

如果你的Vim足够新(7.3.6xx),你可以将gn:normal结合使用:

:/foo/normal ygn

要抓到特定的注册表:

:/foo/normal "aygn

请参阅:help :normal:help gn

答案 1 :(得分:0)

要抽出与模式匹配的所有文本,请定义一个函数以将字符串存储在寄存器中:

fun! Save(s)
    let @a .= a:s . "\n"
endfun

然后,清除您的注册表并执行以下替换:

:let @a='' | %s/mypattern/\=Save(submatch(0))/g

这将每次评估表达式Save(submatch(0)) 模式匹配(请参阅:help :s\=),并将其用于替换。 submatch(0)会返回匹配的文字(与&相同),Save也会 将此附加到注册a。不要忘记之后撤消,或包括 如果您不想进行破坏性修改,请在函数中return a:s

然后,您可以:new | put a查看结果。如果你想要其他的话 信息,例如匹配发生的行号,修改 功能:

fun! Save(s)
    let @a .= line('.') . ': ' . a:s . "\n"
endfun