Como copiar / colar novo texto sem recuo automático a cada nova linha?


7

Como colo agora:

  1. Clique com o botão direito / Copiar ou simplesmente realce.
  2. Clique com o botão direito do mouse / Colar ou Clique com o botão direito do mouse ou CTRL + SHFT + V
  3. Os recuos aparecem em intervalos crescentes: 0, 2, 4, 6, +

Pergunta em questão:

Da pesquisa anterior, eu achei que a solução rápida e suja está a entrar o seguinte no meu .vimrcarquivo: set paste. No entanto, aqueles que sugeriram esse comando disseram que isso set pasteafeta outras configurações. (Em cima da minha cabeça, eu esqueço.)

Gostaria de saber qual opção posso definir que simplesmente cola sem recuo extra. Se isso acabar sendo'paste' , eu gostaria de saber o que exatamente esse comando faz.

Eu só vejo uma diferença. Quando no Vim, -- INSERT --torna-se-- INSERT (paste) --


Você está colando no modo Inserir? No modo Normal, sempre recebo o recuo como no texto arrancado, a menos que cole com ]p, que cola e ajusta o recuo para que esteja correto.
Gonçalo Ribeiro

Respostas:


11

OK, aqui está uma cartilha "puxe e ponha"…

No Vim, os comandos principais para puxar (copiar) e colocar (colar) são ye p.

Yanking coloca o texto arrancado em um registro. Esse registro é o registro sem nome ", por padrão, mas é possível usar outros registros:

"ay    " yank into register a
"by    " yank into register b
"+y    " yank into clipboard register
[…]

Da mesma forma, colocar insere texto de um registro. Esse registro é o registro sem nome por padrão, mas é possível usar outros registros:

"ap    " put from register a
"+p    " put from clipboard register
"3p    " put from the register 3
[…]

Esses comandos são preferidos para "Clique com o botão direito do mouse / Colar ou Clique com o botão direito do mouse ou CTRL + SHFT + V" porque o texto é "colocado" no buffer sem nenhum tratamento especial. Com "Clique com o botão direito do mouse / Colar ou Clique com o botão central ou CTRL + SHFT + V", o texto é inserido no buffer como se você o tivesse digitado e, portanto, sujeito a recuo / formatação automática.

Se você não pode usar "+pou "*p- trabalhando com o SSH sem o encaminhamento do X ou o Vim criado sem o suporte da área de transferência - a pasteopção desativa o recuo automático e várias outras opções muito úteis para que o texto digitado não seja alterado.

Conforme observado :help 'paste, as opções têm efeitos colaterais potencialmente muito ruins, portanto, é importante desativá-lo logo após colar o texto:

:set paste
(paste)
:set nopaste

Essa dança é obviamente uma chatice, então há outra opção que permite definir um atalho especial para alternar paste:

set pastetoggle=<F12>

Isso reduz um pouco a dor:

<F12>
(paste)
<F12>

Mas ainda é uma dor.

Se puder, é recomendável instalar um Vim adequado com suporte à área de transferência para que você possa usar "*pou "+p(dependendo de como copiou o texto) para colar o texto da maneira correta .

  • No Mac OS X: instale o MacVim,
  • em sistemas baseados em Debian: instale o pacote vim-gnome ou vim-gtk,
  • no CentOS: instale o pacote aprimorado para vim.

Referência:

:help p
:help y
:help registers
:help 'paste'
:help 'pastetoggle'

11
Descrever algo como "o caminho certo" sem explicar o porquê ou fornecer um contra-exemplo não é útil.
alxndr

11
Eu concordo com um @alxndr. Primeiro, eu não tenho o Ubuntu, o que é afirmado na minha pergunta. Segundo, não há contexto sobre como usar "*p. Digito enquanto estiver no modo de exibição? Ou adicione ao .vimrc?
onebree 12/02

@ onebree é como p, mas para colar a partir da área de transferência do sistema operacional. Veja vi.stackexchange.com/q/84/205
muru

Defina isso na sua resposta então.
Onebree 12/02


7

O VIM possui outra configuração pastetoggleque define o mapeamento para alternar o modo de colar. É isso que você gostaria de fazer e, em seguida, basta ativar o modo de colar e colar.

Embora eu ache isso um pouco menos intuitivo e muitas vezes achei ]pa melhor maneira de colar código em vez de usar apenasp


6

Se você estiver usando um emulador de terminal bastante moderno, poderá instalar o plugin vim-bracketed-paste .

Dos documentos:

Sabe-se que xterm, urxvt, iTerm2, gnome-terminal (e outros terminais usando libvte) funcionam.

Após a instalação, você pode simplesmente colar normalmente no modo de inserção, e ele cuidará da configuração e remoção da pasta para você.


Eu sou o GNOME TERMINAL 3.8.4
onebree 12/02/2015

Isso deve funcionar para você. O Gnome Terminal suporta pasta entre colchetes por um tempo.
Jay Thompson

Outra opção de plug-in: o Vim-unimapired fornece yo/ yOoperadores que imitam oe Ooperadores, mas apenas set pasteaté o modo de inserção ser encerrado.
Peter Rincker

3

Para colar texto no vim sem recuo automático, você precisa colocar o Vim no modo Colar. Isso é útil se você deseja recortar ou copiar algum texto de uma janela e colá-lo no Vim. Isso evitará efeitos inesperados. Veja: :help pastepara mais detalhes.

Para facilitar a vida, existe uma pastetogglevariável que especifica a sequência de teclas que alterna a opção 'colar' ( :set invpaste).

Por exemplo, se você gostaria de usar F2para desativar a recusa automática ao colar no terminal X, você pode usar o seguinte código em seu .vimrcarquivo:

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

1

Unimpaired.vim resolve esse problema da maneira mais eficiente que já vi. Ele fornece alguns mapeamentos para entrar no modo Inserir com 'paste'habilitado e desabilita-o automaticamente quando você retorna ao modo Normal. yoabre uma nova linha abaixo do cursor; yOacima. (Assim como oe O.)

O plug-in também fornece um conjunto de outros mapeamentos úteis para navegar nas listas, alterar configurações comuns e algumas conversões de texto bacanas. Os mapeamentos são exemplares: eles parecem nativos do Vim sem pisar na funcionalidade existente.

Eu forneço apenas os detalhes no parágrafo anterior, porque muitos estariam relutantes em instalar um plug-in para resolver o problema em questão. No entanto, acho que eles ficariam felizes com as outras coisas (não relacionadas) que Unimpaired.vim tem a oferecer.


1

Quando você está em um servidor ou sistema em que não pode ou não deseja alterar a configuração, a maneira mais rápida é

:i!

Isso entrará no modo de inserção com o autoindent desativado, onde você cola seu texto. Quando terminar, você precisará digitar

.

em sua própria linha para finalizar a inserção.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.