asdfasdf. asdf
asdfasdf. asdf
asdfasdf.  asdf
asdfasdf.	asdf
asdfasdf. 	asdf
asdfasdf.	 asdf
asdfasdf.		asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf  asdf
asdfasdf	asdf
asdfasdf	 asdf
asdfasdf 	asdf
asdfasdf		asdf
zx cvn. as dfg? hjkl iop! ert ernop
zx cvn. as dfg? hjkl iop! ert ernop

asdfasdf.  asdf
asdfasdf.  asdf
asdfasdf.  asdf
asdfasdf.	asdf
asdfasdf. 	asdf
asdfasdf.	 asdf
asdfasdf.		asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf  asdf
asdfasdf	asdf
asdfasdf	 asdf
asdfasdf 	asdf
asdfasdf		asdf
zx cvn.  as dfg?  hjkl iop!  ert  enop
zx cvn.  as dfg? hjkl iop! ert ernop

asdfasdf.  asdf
asdfasdf.  asdf
asdfasdf.  asdf
asdfasdf.	asdf
asdfasdf. 	asdf
asdfasdf.	 asdf
asdfasdf.		asdf
asdfasdf asdf
asdfasdf asdf
asdfasdf  asdf
asdfasdf	asdf
asdfasdf	 asdf
asdfasdf 	asdf
asdfasdf		asdf
zx cvn.  as dfg? hjkl iop! ert  a


{
/* Make sure the previous comment leader is not removed. */
/* Make sure the previous comment leader is not removed. */
// Should the next comment leader be left alone? Yes.
// Should the next comment leader be left alone? Yes.
/* Here the comment leader should be left intact. */ // And so should this one.
/* Here the comment leader should be left intact. */ // And so should this one.
if (condition) // Remove the next comment leader! OK, I will.
    action();
if (condition) // Remove the next comment leader! OK, I will.
    action();
}

1 this shouldn't be deleted
2 this shouldn't be deleted
3 this shouldn't be deleted
4 this should be deleted3

6 this shouldn't be deleted vim5
7 this shouldn't be deleted vim6
8 this shouldn't be deleted (not touched yet) vim7


{
/* Make sure the previous comment leader is not removed.  */
/* Make sure the previous comment leader is not removed.  */
/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
// Should the next comment leader be left alone?  Yes.
// Should the next comment leader be left alone?  Yes.
/* Here the comment leader should be left intact. */ // And so should this one.
/* Here the comment leader should be left intact. */ // And so should this one.
if (condition) // Remove the next comment leader!  OK, I will.
    action();
if (condition) // Remove the next comment leader!  OK, I will.
    action();
int i = 7 /* foo *// 3 // comment
 ;
int i = 7 /* foo *// 3 // comment
 ;
># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.

Some code!// Make sure backspacing does not remove this comment leader.
}

