Como posso manter o código formatado como fonte original quando os colo no vim?

33

Quando copio algum código de páginas da Web e o colo no VIM, descubro que ele se torna um estilo de confusão como uma escada da seguinte forma

xxxxxx
   xxxxxx
      xxxxxx
         xxxxxxxxxx

Como isso é uma bagunça tão frequente, acho que talvez haja algo errado com meu .vimrc , que é o seguinte:

set number
set nocompatible
set nowritebackup
set noswapfile
syntax on
filetype indent on
filetype plugin on
filetype on
set background=light
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set showmatch
set guioptions=T
set fileencodings=utf-8,prc
set ruler
set incsearch
map gs :%s
set t_Co=256
:colorscheme evening
filetype plugin indent on

Normalmente eu escrevo python no VIM. E a ajuda seria apreciada.

    
por SpawnST 26.04.2010 / 06:02

4 respostas

46

Faça isso antes:

:set paste

Então depois:

:set nopaste
    
por 26.04.2010 / 06:05
16

link

Alternar recuo automático para colar de código

Plano de fundo

Se você usar comandos do Vim para colar texto, nada inesperado ocorrerá. O problema surge apenas ao colar de outro aplicativo, e somente quando você não está usando uma versão GUI do Vim. Em um console ou versão de terminal do Vim, não há procedimento padrão para colar texto de outro aplicativo. Em vez disso, o terminal pode emular a colagem inserindo texto no buffer do teclado, portanto o Vim acha que o texto foi digitado pelo usuário. Após cada final de linha, o Vim pode mover o cursor para que a próxima linha comece com o mesmo recuo da última. No entanto, isso irá alterar o recuo já no texto colado.

Colar alternar

Coloque o seguinte no seu vimrc (mude para qualquer chave que você queira):

set pastetoggle=<F2>

Para colar de outro aplicativo:

  • Inicie o modo de inserção.
  • Pressione F2 (alterna a opção 'colar').
  • Use seu terminal para colar texto da área de transferência.
  • Pressione F2 (desativa a opção 'cole').

Em seguida, o recuo existente do texto colado será retido.

Você não precisa iniciar o modo de inserção primeiro, mas se você estiver no modo normal e tiver um mapeamento para F2, esse mapeamento será aplicado e a função 'pastetoggle' não funcionará.

Algumas pessoas gostam do feedback visual mostrado na linha de status pela seguinte alternativa para o seu vimrc:

nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode

A primeira linha define um mapeamento para que pressionar F2 no modo normal inverta a opção 'colar' e mostrará o valor dessa opção. A segunda linha permite que você pressione F2 quando estiver no modo de inserção, para ativar e desativar 'colar'. A terceira linha permite exibir se 'colar' está ativado no modo de inserção.

    
por 26.04.2010 / 10:16
2

É o autoindent que está mexendo com você.

set autoindent
set smartindent

Tente desativá-los quando recortar e colar seu código e, em seguida, ative-os novamente quando terminar.

    
por 26.04.2010 / 06:24
-2

O menor esforço para conseguir isso é (pode ser colocado em .vimrc ):

:set paste

Em seguida, cole o seu código.

    
por 08.11.2016 / 20:18