删除/剪切 2 种模式(加载到寄存器)VIM 之间的所有内容



我需要删除 2 种模式之间的所有内容,或者更确切地说,剪切它并放置该 ot 寄存器以供以后使用(将其放入不同的文件)

%s/V<se.{-}</sel//gc

但这只是删除(它不起作用,我想剪切它并把它注册(也许我需要一些脚本)

使用全局命令就可以了。

let @a=''|g/startpattern/.+1,/stoppattern/-1 delete A

哪里

let @a=''                    - Clear the a register
g/startpattern/              - search for the start of the pattern
.+1,/stoppattern/-1 delete A - delete everything between start and stop and 
                               append it to register a

工作于

startpattern
this goes to register A
so does this
stoppattern

但不适用于

startpattern this should go to register A stoppattern.

不知道你想要的两种模式到底是什么,但试试这一行:

s/pattern1zs_.{-}zepattern2/=setreg('x',submatch(0))>-1:'':''/
  • 这里的两种模式是pattern1pattern2
  • 两种模式之间的文本(可以是多行)将被空字符串替换,它们本身的两个模式不会被替换。
  • "已删除"文本将保存在寄存器x

假设您有一个与您想要"切割"的模式完全匹配的模式,只需使用普通 / 搜索搜索该模式即可。然后,您可以使用 gn 对象对搜索命中进行操作,以便以后粘贴,例如 dgn

如果您没有此模式,而是具有开始和结束正则表达式,则只需将光标放在"开始"模式的末尾(例如,带有/pattern/e),然后删除,直到搜索命中结束模式,例如 d/pattern2 .

最新更新