删除/剪切2个模式之间的所有内容(加载到注册)vim

时间:2015-01-06 10:46:20

标签: vim

我需要删除2个模式之间的所有内容,或者更确切地说是将其删除并将其放在后面使用(将其放到不同的文件中)

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

但这只是删除(并且它不起作用,我想要切割它并将其注册(可能我需要一些脚本)

3 个答案:

答案 0 :(得分:2)

确切地知道你想要的两种模式,但试试这行:

s/pattern1\zs\_.\{-}\zepattern2/\=setreg('x',submatch(0))>-1:'':''/
  • 这里的两种模式是pattern1pattern2
  • 文本(可能是多行)之间的两个模式将被空字符串替换,这两个模式将自己不会被替换。
  • &#34;删除&#34;文本将保存在注册表x

答案 1 :(得分:2)

使用全局命令可以正常工作。

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.

答案 2 :(得分:0)

假设您的模式与您想要的模式完全匹配&#34; cut&#34;,只需使用普通的 / 搜索搜索该模式。然后,您可以使用gn对象对搜索匹配进行操作,以便日后粘贴,例如dgn

如果你没有这个模式,而是有一个开始和结束正则表达式,那么只需将光标放在&#34; start&#34;的末尾。模式(例如,使用/pattern/e),然后删除直到搜索结束模式,例如d/pattern2