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) --

onebree
fonte
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
Consulte também Definir a opção de colar, mas apenas para uma inserção
Gilles 'SO- stop be evil'

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'
romainl
fonte
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
11
Eu acho que você está procurando Definir a opção de colar, mas apenas para uma inserção
Gilles 'SO- stop be evil'
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

Dhruva Sagar
fonte
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ê.

Jay Thompson
fonte
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>
kenorb
fonte
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.

tommcdo
fonte
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.

Laktak
fonte