delete/cut 2 种模式之间的所有内容(加载到寄存器)vim

delete/cut everything between 2 patterns (load to register) vim

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

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

但这只是删除(它没有用,我宁愿把它剪下来注册(也许我需要一些脚本)

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

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

使用全局命令就可以了。

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.

假设您有一个与您想要的完全匹配的模式 "cut",只需使用正常的 / 搜索来搜索该模式。然后您可以使用 gn 对象对搜索命中进行操作以供稍后粘贴,例如 dgn.

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