> > for linenum in range(a:firstline, a:lastline)
>
> You might want to delete the lines in reverse order, i.e. from the
> bottom to the top.
Tried that, but couldn't find the right incantation, this is my first
try at vimscript ;)
> I also wonder if you could make use of the :g
> command.
Thanks a lot, :global is perfect! I'm hitting another issue now, with a
part of code not included so far (hence the subject change). Now I have:
fu! <SID>RemoveFuzzy() range
execute ':''<,''>global/^#,\sfuzzy$\|^#|\s.*".*"$/d'
for linenum in range(a:firstline, a:lastline)
let line = getline(linenum)
if line =~ '^#,\(.*,\)\=\s*fuzzy'
call setline(linenum, substitute(line, ',\s*fuzzy', '', ""))
endif
endfor
endf
I tried (no pun intended) to replace the 'for' loop with:
try
execute ':''<,''>global/^#,\(.*,\)\=\s*fuzzy/s/,\s*fuzzy//'
catch /^Vim\%((\a\+)\)\=:E486/ " based on example from :help catch
endtry
but I still get:
E486: Pattern not found: ^#,\(.*,\)\=\s*fuzzy
I can work around it by reversing the order, let the substitute global
do its work and then remove any '^#$' lines left behind in the deleting
global, but according to :help it should work.
Regards,
Andrei
--
http://nuvreauspam.ro/2010/05/4-neticheta-pe-mail/
No comments:
Post a Comment