Hi all,

On Thu, Dec 2, 2010 at 12:23 AM, bsmile <[email protected]> wrote:
>
> Dear members,
>
> I copy something and paste to another vi editor, but the leading white space
> adds up for subsequent lines. For example, what is copied is
>
>  aa
>  bb
>  cc
>  dd
>
> when pasted into another vi, what I get is
>
>  aa
>    bb
>      cc
>        dd
>
> Any idea to why this happens and how to solve it?
>

As this question has become a FAQ, I decided to write a detailed answer.

When you paste text into a GUI Vim using the mouse, Vim is able to
detect that you are pasting text. So all the indentation related
settings (like autoindent, smartindent, cindent, etc.) are ignored and
the text is pasted literally.

When pasting text into a Vim running in a terminal (like xterm) using
the mouse, Vim may not be able to detect that you are pasting text. This
depends on several things: the capability of the terminal to pass the
mouse events to Vim, Vim is compiled to handle mouse events and access
the clipboard, the DISPLAY variable is set properly, the Vim 'mouse'
option is set correctly.

If Vim is able to detect that you are pasting text using the mouse, then
the pasted text will be inserted literally.

If Vim is not able to detect that you are pasting using the mouse, then
it will see the pasted text as though you literally typed the text.
After the first line from the pasted text is inserted, when Vim
encounters the newline character, because of the indentation settings,
the next line will start indented. The spaces at the beginning of the
second line in the pasted text will be inserted leading to additional
indentation. This will be repeated for subsequent lines. So the pasted
text will be inserted with stair case indentation.

You can fix this problem in a terminal Vim in several ways:

1. Build Vim with the +mouse and +xterm_clipboard compile-time options.
   The normal or big or huge build of Vim includes these options.  Set
   the 'mouse' option to either 'a' or include 'i'.  When pasting text
   using the mouse, don't press the Shift key. This will work only if
   Vim can access the X display. For more information, read the
   following Vim help topics:

       :help +feature-list
       :help 'mouse'
       :help <MiddleMouse>
       :help x11-selection
       :help xterm-clipboard

2. Paste the text using the CTRL-R CTRL-O * command.  This will paste
   the text literally without any automatic indentation. If you want to
   paste the text and then fix the indentation, then you can use CTRL-R
   CTRL-P *. These commands will work only if Vim can access the X
   display. For more information, read the following Vim help topics:

       :help i_CTRL-R_CTRL-O
       :help i_CTRL-R_CTRL-P
       :help quotestar

3. Set the 'paste' option before pasting the text. This option will
   disable the effect of all the indentation related settings. Make sure
   to turn off this option using ':set nopaste' after pasting the text.
   Otherwise the Vim indentation feature will not work.  Do not
   permanently set the 'paste' option in your .vimrc file. If you are
   going to repeat these steps often, then you can set the 'pastetoggle'
   option to a key. When you press the specified key, the 'paste' option
   option will be toggled. You can press the key once before pasting the
   text and the press the key once after pasting the text. Note that
   when the 'paste' option is set, all the mappings and abbreviations
   are disabled.  For more information, read the following Vim help
   topics:

       :help 'paste'
       :help 'pastetoggle'

You can also refer to the following topics in the user manual:

    :help 04.7
    :help 09.3


- Yegappan

-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Reply via email to