1

In Normal mode I use the following combination to edit multiple lines:

  1. Ctrl + v
  2. Select lines to edit
  3. Shift + i
  4. Edit line
  5. Esc

However, this method only applies changes to the first line if character deletion is involved. Uncommenting a long block of code can thus become a small headache.

What is this method missing for multi-line deletion? Or should a different method be applied.

  • What do you mean by "character deletion"? Do you mean using backspace? Why not use Ctrl+V to select the comment characters and then use x to delete that block? Also take a look at plug-ins such as vim-commentary which should make your life much easier! – filbranden Jun 2 at 19:42
  • If you want to delete the characters you selected, you can use s to substitute your selection, then type in what you need. But as for commenting, I'd advocate vim-commentary as well. – Biggybi Jun 3 at 3:05
  • 1
    I think your question is a duplicate of this one. However I had never noticed the behavior you mention before but it seems to indicate that you are using the insert mode for the wrong kind of operations (i.e. anything else than inserting new characters) – statox Jun 3 at 8:19
  • @statox, I don't think that is the same question. I am trying to find a method for multi-line deletion, not only uncommenting. – Luís de Sousa Jun 3 at 8:22
  • 1
    @filbranden Your reply is close to an answer. The problem is that each I delete a character the block selection is reset and I need to select the block again. – Luís de Sousa Jun 4 at 8:08
2

It seems you're using the backspace key in insert mode to delete the comments. As you found out, this will not really work at all in visual block mode.

Instead, you can simply use the x or d commands to delete a visual selection. See :help v_x.

If you want to delete multiple comment characters, you can make your visual block take up "n" columns to cover all the comment characters.

For example, if your comments are // and you have a blank space after the comments (so 3 characters total), then you can:

  1. Move to the // on the first line where you want comments removed.
  2. Use Ctrl+V to enter Visual Block mode.
  3. Move to the // on the last line where you want comments removed. You'll have a n x 1 block, with "n" lines and one column.
  4. Move to the blank right after the //, with a command such as 2l or fSpace, now you'll have a n x 3 visual block.
  5. Use x or d. This will remove the contents of the visual block, with the comments.

You might also want to consider adopting a plug-in to help inserting, removing or toggling comments. I can recommend vim-commentary which does a great job. This (and similar plug-ins) are typically also able to figure out which style of comments you need for the language you're using, so they typically require zero configuration other than having your plug-in manager install and enable them.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.