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:'':''/
- 这里的两个模式是
pattern1
和pattern2
- 两个模式之间的文本(可以是多行)将被替换为空字符串,两个模式本身不会被替换。
- "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
.
我需要删除 2 个模式之间的所有内容,或者更确切地说,将其删除并放入那个 ot 寄存器以备后用(将其放入不同的文件)
%s/\V<se.\{-}<\/sel//gc
但这只是删除(它没有用,我宁愿把它剪下来注册(也许我需要一些脚本)
不知道你想要的两种模式是什么,但试试这行:
s/pattern1\zs\_.\{-}\zepattern2/\=setreg('x',submatch(0))>-1:'':''/
- 这里的两个模式是
pattern1
和pattern2
- 两个模式之间的文本(可以是多行)将被替换为空字符串,两个模式本身不会被替换。
- "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
.