Vim: paste indent problems

On one of my boxes I came across this weird behaviour when pasting code into Vim at the terminal. All indentation was broken in a stepped way. Every line indented more and more creating a real mess to work with. This only happened when actually pasting content into the terminal. Typing worked as normal.

I initially thought that it had something to do with Putty‘s way of interacting with this specific box e.g. some configuration that was missing. Issues exist with carriage return (CR) and line feed (LF) handling across platforms. Nevertheless this was a dead end.

Digging around Vim’s extensive wiki provided some clues as to what was going on. Having ‘autoindent‘ or ‘smartindent‘ on creates havoc when pasting into Vim and therefore should be disabled. The problem is that these are nice features to have on when simply typing.

Vim has an alternative mode called ‘paste‘ that does not modify the pasted input in any way and therefore code looks just as in the original source. To enable ‘paste‘ mode during insert simply type ‘:set paste‘ and you are ready to paste. When finished pasting you probably want to leave ‘paste‘ mode by typing ‘:set nopaste‘.

As I am too lazy to type this every time I need to paste something I have now added the ‘pastetoggle‘ key into my profile’s .vimrc file as follows: ‘set pastetoggle=<F12>

From now on simply hit F12 on the keyboard and you will be in ‘paste‘ mode. Press F12 again to leave it.

Comments

18 responses to “Vim: paste indent problems”

  1. Francesco avatar

    Saved my day, thanks!

  2. Eli avatar
    Eli

    Thanks for the tip!

  3. awol avatar
    awol

    one of those niggling problems i’ve had for aaaages. it finally got to me and I snapped and undertook a vengeful google search and found your site. thanks for the tip.

  4. emil avatar
    emil

    thanks much! that was helpful!

  5. Jeff avatar
    Jeff

    This was extremely helpful thank you!!

  6. Eduardo avatar
    Eduardo

    Saved+my+day!+I+have+to+work+remotely+on+some+texts+and+vim+kept+breaking+lines,+it+was+driving+me+insane!+Thanks+a+lot.

  7. Rakesh avatar
    Rakesh

    Thanks. Helped me.

  8. Sam avatar
    Sam

    Thanks for the tip. I’ve always used “set noai” in the paste for this, but it didn’t work when using a new terminal today, but “set paste” did.

  9. Rob Bean avatar

    Thanks a bunch for posting this. Helped me from losing all my hair today.

  10. Fedyashev Nikita avatar
    Fedyashev Nikita

    Thanks, dude! It was pretty annoying before 🙂

  11. simon avatar
    simon

    While not the same thing, it’s note worthy: :set paste! toggles paste mode too.

  12. Tomtom avatar
    Tomtom

    Thank you very much for this hint !

  13. mr-euro avatar

    @sid

    You are welcome!

  14. sid avatar
    sid

    thanks for this.

  15. mr-euro avatar

    @Srikanth

    Excellent!

  16. Srikanth avatar
    Srikanth

    Thanks, it helped me today 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

Why ask?