On Sunday, February 6, 2011 2:00:54 AM UTC+1, ZyX wrote:
It should be
:%s/.*{pattern}.*\n//
or, in this particular case:
:%s/.*abc\ndef.*\n//
because we are going to delete the whole lines that contain match, but nobody
said that they contain only match. Both solutions does not work for patterns
with \zs and \ze, maybe it is better to do the following:function! s:MarkToDel(todelete, sline, submatch)
let lnum=len(substitute(a:submatch, '\n\@!.', '', 'g'))
call add(a:todelete, [a:sline, lnum])
return a:submatch
endfunction
function! DeleteMatchingLines(pattern)
let todelete=[]
let savedgdefault=&gdefault
set nogdefault
try
execute '%s/'.escape(a:pattern, '/').
\'/\=s:MarkToDel(todelete, line("."), submatch(0))'
finally
let &gdefault=savedgdefault
endtry
let deleted=0
for [sline, lnum] in todelete
let sline-=deleted
let deleted+=lnum+1
let range=sline.','.(sline+lnum)
execute range.'delete _'
endfor
endfunction
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
No comments:
Post a Comment