我正在尝试对搜索模式执行操作,但我无法弄清楚如何执行此操作。这里的目标是能够拉出一个模式,但到目前为止我只能拉一整行。是否有一个技巧可以使此命令仅在匹配的模式上运行?
:/pattern.*/v
答案 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