Hi vimmers,

I have a very strange problem and couldn't figure out what's going on.
I use the following function for commenting out a line or a block of
lines:


function! Komment2(commentLeader, commentTrailer)
   if match( getline("."), "^\ *$" ) < 0
       let save_cpo   = &cpoptions
       let save_paste = &paste
       set cpo&vim
       set paste
       let escCommentLeader = escape(a:commentLeader, '^[.*\~]$')
       let escCommentTrailer = escape(a:commentTrailer, '^[.*\~]$')
       if getline(".") =~ '^\s*' . escCommentLeader . '.*' .
escCommentTrailer . '$'
           execute "normal ^" . strlen(a:commentLeader) . "x$" .
strlen(a:commentTrailer)
. "hl" . strlen(a:commentTrailer) . "x"
       else
           execute "normal I" . a:commentLeader . "\<ESC>" . "A" .
a:commentTrailer . "\<
ESC>"
       endif
       let &cpo   = save_cpo
       let &paste = save_paste
   endif
   echo
endfunction


This function is a modified version of something I found in one of the
tips or scripts of the vim website. For C I use of course

Komment2('/* ', ' */')

and this works perfectly well, I can select a block of lines, call the
above function and every line will be commented out. It even works in
a toggling way, so commented lines will be uncommented. So far so
good, now comes the strange behaviour.

If there is a line which only contains a { character and that line is
commented out so it looks like /* { */ and then I call the above
function to uncomment it, everything below this line will be deleted.

It's probably unrelated but just in case I mention that I have the
following syntax method set:

syn region myFold start='{' end='}' transparent fold
set foldmethod=syntax

Anyone has an idea what's going on?

Reply via email to