Loading ...
Sorry, an error occurred while loading the content.

How to make a vim map to after some treatment pass foward to the natural treatment

Expand Messages
  • Rodrigo Gurgel
    I want to map a Shift + Insert, as I usually paste code for studing (or even take some of forum s questions to prepare an answer). But as mapped for .cpp and
    Message 1 of 2 , Aug 1, 2012
    • 0 Attachment
      I want to map a Shift + Insert, as I usually paste code for studing (or even take some of forum's questions to prepare an answer). But as mapped for .cpp and .h the pasted code appears messed up.

      Example:

      1 class A {
      2 }
      3 public:
      4 class B {
      5 }
      6 // ...
      7 // };
      8 // static void f();
      9 // // ...
      10 // };
      11 // )

      Original code:

      class A {
      public:
      class B {
      // ...
      };
      static void f();
      // ...
      };

      To avoid this is necessary to run :set paste.

      So, the question is, how to map a Shift + Insert, just like imap <S-Insert> <Esc>:set paste<CR>i and very here pass foward the Shift + Insert to its natural behavior, that is pasting and then turn back and set :set paste! back?

      Obs.: { is mapped to break line and put and ending }, along with that kind of maps the pasted text will be messed up.

      Thanks.

      --
      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
    • Gary Johnson
      ... I started to suggest using :inoremap to define your mapping since that will ignore any mappings of keys used on the rhs of the mapping. However, as I was
      Message 2 of 2 , Aug 1, 2012
      • 0 Attachment
        On 2012-08-01, Rodrigo Gurgel wrote:
        > I want to map a Shift + Insert, as I usually paste code for
        > studing (or even take some of forum's questions to prepare an
        > answer). But as mapped for .cpp and .h the pasted code appears
        > messed up.
        >
        > Example:
        >
        > 1 class A {
        > 2 }
        > 3 public:
        > 4 class B {
        > 5 }
        > 6 // ...
        > 7 // };
        > 8 // static void f();
        > 9 // // ...
        > 10 // };
        > 11 // )
        >
        > Original code:
        >
        > class A {
        > public:
        > class B {
        > // ...
        > };
        > static void f();
        > // ...
        > };
        >
        > To avoid this is necessary to run :set paste.
        >
        > So, the question is, how to map a Shift + Insert, just like imap
        > <S-Insert> <Esc>:set paste<CR>i and very here pass foward the
        > Shift + Insert to its natural behavior, that is pasting and then
        > turn back and set :set paste! back?
        >
        > Obs.: { is mapped to break line and put and ending }, along with
        > that kind of maps the pasted text will be messed up.

        I started to suggest using :inoremap to define your mapping since
        that will ignore any mappings of keys used on the rhs of the
        mapping. However, as I was verifying the problem I discovered that
        the problem doesn't exist for me. Starting Vim like this,

        "C:\Program Files\vim\vim73\gvim.exe" -u NONE -i NONE

        and executing either

        :set ai

        or

        :filetype indent on
        :set ft=cpp

        before pasting your original code using <S-Insert> resulted in
        the same indentation as the original code. This was using Vim
        7.3.600 on Windows XP.

        I think something in your configuration is causing the problem.

        :help <S-Insert>

        says that that keycode is already mapped to

        <C-R><C-O>*

        (which I verified) and

        :help i_CTRL-R_CTRL-O

        says that that command inserts the contents of a register literally
        and without auto-indenting.

        So, you shouldn't be seeing any auto-indenting when you paste with
        <S-Insert>. What do you see when you execute

        :imap <S-Insert>

        ?

        Regards,
        Gary

        --
        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
      Your message has been successfully submitted and would be delivered to recipients shortly.