Por que o recuo do Vim colou o código incorretamente?

82

No Vim, se eu colar este script:

#!/bin/sh
VAR=1
while ((VAR <  10))
    do
        echo "VAR1 is now $VAR"
        ((VAR = VAR +2))
    done
    echo "finish"

Eu obtenho estes resultados estranhos:

#!/bin/sh
#VAR=1
#while ((VAR <  10))
#       do
#                       echo "VAR1 is now $VAR"
#                                       ((VAR = VAR +2))
#                                               done
#                                                       echo "finish"
#                                                       

Os sinais hash (#) e as guias apareceram. Por quê?

    
por elbarna 28.04.2015 / 20:06

3 respostas

105

Existem dois motivos:

Para colar em vim enquanto o recuo automático estiver ativado, você deve alterar para modo de colagem digitando :

:set paste

Depois, você pode mudar para o modo de inserção e colar seu código. Depois de colar, digite:

:set nopaste

para desativar o modo de colagem. Como essa é uma ação comum e frequente, vim oferece alternar o modo de colagem:

set pastetoggle=<F2>

Você pode alterar F2 para qualquer chave desejada e, agora, é possível ativar e desativar a colagem facilmente.

Para desativar a inserção automática de comentários, você pode adicionar essas linhas ao seu vimrc :

augroup auto_comment
    au!
    au FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
augroup END

vim também fornece um registro de colagem para você colar texto da área de transferência do sistema. Você pode usar "*p ou "+p dependendo do seu sistema. Em um sistema sem X11, como o OSX ou o Windows, você precisa usar o * register. Em um sistema X11, como o Linux, você pode usar ambos.

Outras leituras

por 28.04.2015 / 20:15
32

Use a pasta vim. O que você quer é colar o que está no buffer da área de transferência " + p

Isso seleciona o + e o cola no lugar.

Se você estiver usando o Linux, * é o buffer de clique do botão X / (o último texto selecionado).

Então o vim sabe que é uma pasta.

Caso contrário, o vim pensa que você digitou as chaves que estão sendo coladas e faz seu próprio recuo automático (no topo do recuo copiado) até o final da colagem.

Como uma observação para isso funcionar no SSH, você precisa definir a opção para que sua área de transferência seja compartilhada -Y

Veja man ssh para mais detalhes.

    
por 28.04.2015 / 21:44
7

As guias foram inseridas porque você ativou o autoindent e pode desativar esse comportamento desativando o autoindent ( :set noai ) antes de colar no terminal.

As linhas comentadas são produzidas por comentários automáticos e podem ser desativadas desativando isso.

Alternativa para aqueles que você deve obter o comportamento desejado usando a opção :set paste , colando o código formatado e :set nopaste para restaurar o comportamento normal.

    
por 28.04.2015 / 20:13