On Ma, 01 iun 10, 21:32:01, Tom Link wrote:
> >    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/

Attachment: signature.asc
Description: Digital signature

Reply via email to