Estou fazendo um esforço para aprender o Vim.
Quando colo o código no meu documento a partir da área de transferência, obtenho espaços extras no início de cada nova linha:
line
line
line
Eu sei que você pode desativar o recuo automático, mas não consigo fazê-lo funcionar porque tenho outras configurações conflitantes ou algo assim (que parece bastante óbvio no meu .vimrc, mas não parece importar quando as tiro).
Como desativo o recuo automático quando colo o código, mas ainda tenho o recuo automático do vim quando estou escrevendo o código? Aqui está o meu .vimrc
arquivo:
set expandtab
set tabstop=2
set shiftwidth=2
set autoindent
set smartindent
set bg=dark
set nowrap
cat > mynewfile.txt
pressione Enter , cole seu texto, pressione Enter novamente e, em seguida , pressione Ctr + D para salvar. O arquivo agora está criado e você pode editá-lo comvim mynewfile.txt
.Respostas:
Atualização: Melhor resposta aqui: https://stackoverflow.com/a/38258720/62202
Para desativar o autoindent ao colar o código, existe um modo especial "colar".
Tipo
Em seguida, cole seu código. Observe que o texto na dica de ferramenta agora diz
-- INSERT (paste) --
.Depois de colar o código, desative o modo de colar, para que o recuo automático ao digitar funcione corretamente novamente.
No entanto, eu sempre achei isso complicado. É por isso
<F3>
que mapeio para que ele possa alternar entre os modos colar e nopaste durante a edição do texto! Eu adiciono isso a.vimrc
fonte
:set noai
seguido por:set ai
. A sugestão de:r! cat
é mais curta.set paste
é mais fácil, definitivamente. É muito mais semântico do quenoai
ou mesmonoautoindent
, o que é mais importante ao digitar "noai" e "paste" e leva a mesma quantidade insignificante de tempo quando você é proficiente o suficiente como datilógrafo.:set noai
nem sempre funciona, dependendo de como as outras configurações relacionadas ao recuo são definidas de acordo com o OP.:set paste
parece ser uma abreviação para várias configurações ao mesmo tempo.set copyindent
vai cuidar disso para você sem problemas.:set paste
também desativa outros recursos, como conclusão de chaves, que também não são desejados ao colar código.Para evitar efeitos indesejados ao colar, existe uma opção que precisa ser definida:
Um comando útil para ter em seu .vimrc é
set pastetoggle=<F10>
ou algum outro botão, para alternar facilmente entre colar e nopaste.fonte
nmap <silent> <leader>p :set paste<CR>"*p:set nopaste<CR>
Normalmente, uso
:r! cat
e colo( shift + insert )
o conteúdo eCTRL+D
.Não há necessidade de ativar e desativar o uso direto.
fonte
:r! cat
funciona.:r
insere o conteúdo de um arquivo no documento atual.!cat
diz, execute cat que essencialmente abre stdin (* nix shells)(shift + insert)
ou, para alguns terminais, o clique com o botão direito do mouse colará o conteúdo da área de transferência no terminal queCTRL+D
está no final do arquivo e, portanto, fechará a:r !cat
sessão.paste
feita exclusivamente para esse fim? @jvriesem Esta não é uma opção 'direta', se o que eu presumo de sua compreensão dessa palavra está correto.:r! cat
, em seguida,CTRL+SHIFT+V
para colar no terminal (entãoCTRL+D
).Se você estiver trabalhando localmente, poderá colar da área de transferência do sistema com a sequência de teclas:
"+p
Este é um comando vim adequado, portanto, não é necessário se preocupar em entrar no modo de inserção ou desativar o autoindent primeiro.
Obviamente, se você estiver trabalhando remotamente (console por SSH, por exemplo), isso não funcionará e você deve ir para o
:set noai
modo de inserção, colar no console, deixar o modo de inserção,:set ai
rota conforme descrito em outro lugar.fonte
:set paste
e,:set nopaste
em vez disso, porque apesar de ser mais longo, é mais fácil lembrar e não preciso procurar sempre!:set paste
não é implementado, portanto:set noai
deve ser usado.<leader>p
.. muito útil!Enquanto definir o modo de colar com
paste/nopaste/pastetoggle
estiver perfeitamente correto, você ainda precisará ativar manualmente o modo de colar antes de colar e desativar o modo de colar após colar. Sendo a pessoa preguiçosa que sou, abaixo está a melhor solução que encontrei até agora, que alterna automaticamente o modo de colar quando você cola.Fonte: Coderwall
Nota: Esta solução não funciona no WSL (Windows 10 Subsystem for Linux). Se alguém tiver uma solução para WSL, atualize esta resposta ou adicione-a nos comentários.
Tmux Se você estiver usando o tmux, as declarações precisam ser escapadas duas vezes. O código para isso também está em Coderwall
fonte
t_SI
et_EI
estão ativando e desabilitando o bracketing de pasta. Quando o bracketing de colagem está ativado, o texto colado é prefixadoesc[200~
e seguido poresc[201~
.Os usuários de Mac podem evitar a formatação automática lendo diretamente a partir da área de transferência com:
fonte
:.!pbpaste
, isso funcionará substituindo a linha atual pela saída do buffer de colagem. Em geral, o vim permite canalizar dados que estão no seu arquivo atual para outro programa e substituir o texto pela saída do comando. Portanto,:1,3!pbpaste
substitui as três primeiras linhas do seu arquivo pelo buffer de colagem. Eu uso:.!ppjson
para pegar uma muito longa (string JSON não formatada) e formatá-la e substituir a longa com o equivalente formatado. O ppjson é apenas um script bash que é executadopython -m json.tool
.Aqui está uma postagem de alguém que descobriu como remapear o evento de colar para ativar e ativar o modo de colar automaticamente. Funciona para mim no tmux / iTerm no MacOSX.
fonte
Adicione isso ao seu
~/.vimrc
e você só precisará pressionar F2 antes e depois de colar:fonte
Acabei de colocar
set clipboard=unnamed
no meu .vimrc. Isso faz com que o buffer de colagem padrão seja mapeado para a área de transferência do X.Portanto, se eu marcar um pouco de texto em um terminal, posso simplesmente pressionar
p
para colá-lo no vim. Da mesma forma, posso arrancar as coisas no vim (por exemplo,YY
para puxar a linha atual para o buffer) e clicar com o botão do meio em qualquer janela para colá-la.Não sei. Acho super conveniente.
fonte
Ao trabalhar dentro de um terminal, a pasta vim-bracketed-paste plugin vim manipulará automaticamente pastas sem a necessidade de pressionar as teclas antes ou depois da pasta.
Ele funciona detectando o modo de colar entre colchetes, que é uma sequência de escape enviada por terminais "modernos" compatíveis com o termo x, como iTerm2, gnome-terminal e outros terminais usando a libvte. Como um bônus adicional, ele também funciona para sessões tmux. Estou usando-o com sucesso com o iTerm2 em um Mac conectado a um servidor Linux e usando o tmux.
fonte
Cole isso em seu ~ / .vimrc e seja feliz:
Edit: na reflexão,
:r !cat
é uma abordagem muito melhor, pois é curta, semântica e não requer vimrc personalizado. Use isso em vez disso!fonte
Embora
:pastetoggle
or:paste
e:nopaste
deva estar funcionando bem (se implementado - eles nem sempre são como podemos ver na discussão), recomendo fortemente colar usando a abordagem direta"+p
ou"*p
e lendo com"+r
ou"*r
:Vim tem acesso aos tipos de dez dos registos (
:help registers
) e o questionador está interessado emquotestar
equoteplus
da seção:help x11-selection
esclarece ainda mais a diferença*
e+
:fonte
Isso funciona para mim (caso para + register, o que eu uso como buffer de troca entre aps):
fonte
Se você estiver em um mac, o macvim parece lidar bem com isso sem precisar alternar a pasta.
brew install macvim --override-system-vim
fonte
.vimrc
arquivo?Leia este artigo: Alternar recuo automático para colar código
fonte
A maneira mais rápida que eu conheço de ir rapidamente para o modo colar-inserir para uma pasta de um tiro é perfeita do tpope , que apresenta
yo
eyO
, presumivelmente, mnemônicos para "você abre". Eles estão documentados apenas em seu vimdoc, como:fonte
Outra maneira de colar é via
<CR>
e soltando o conteúdo do registro (aqui o registro global). Veja::h i_ctrl-r
eh i_CTRL-R_CTRL-O
.Na documentação de ajuda do vim:
Insert the contents of a register literally and don't auto-indent. Does the same as pasting with the mouse<MiddleMouse>. Does not replace characters! The '.' register (last inserted text) is still inserted as typed.{not in Vi}
Portanto, para colar o conteúdo no vim sem recuo automático, use
<CR><CO>*
na maioria dos sistemas unix.Nota: isso só funciona se o vim for compilado
clipboard
.fonte
No vim:
]p
Do lado de fora:
"*]p
ou"+]p
fonte
Outra resposta que não vi até agora:
fonte
Pasta nativa / pasta entre colchetes é a melhor e mais simples maneira desde
vim 8
(lançada em 2016). Até funciona sobre ssh! (A pasta entre colchetes funciona no Linux e Mac, mas não no Windows Git Bash)Verifique se você possui o vim 8+ (não precisa das opções
+clipboard
ou+xterm_clipboard
).vim --version | head -1
Basta usar o comando colar nativo do SO (por exemplo,
ctrl+shift+V
oucmd+V
) no modo normal. Não pressionei
para inserir o modo.Teste
Copie (
ctrl+shift+C
oucmd+C
) a saída disso (2 linhas com recuo de tabulação) na área de transferência do sistema:echo -e '\ta\n\tb'
Inicie um vim limpo 8+ com autoindent:
vim -u NONE --noplugin -c 'set autoindent'
Cole na área de transferência do sistema (
ctrl+shift+V
oucmd+V
) no Modo Normal. Não pressionei
para inserir o modo. Oa
eb
deve estar alinhado com um único recuo da guia. Você pode fazer isso enquanto faz o ssh em uma máquina remota (a máquina remota precisará do vim 8+).Agora tente da maneira antiga, que indentará automaticamente a segunda linha com uma guia extra: Pressione
i
para inserir o modo. Em seguida, cole usandoctrl+shift+V
oucmd+V
. Oa
eb
está desalinhado agora.Instalando o Vim 8
Ubuntu 18.04 - vem com o Vim 8 por padrão .
Ubuntu 16.04 - instale a partir de um PPA .
brew install vim
fonte
Featured snippet
para a minha pesquisa 'colar conteúdo não tabulações vim', talvez porque, eu usei 'guia' palavra-chave, só nesta resposta mencionado :)Infelizmente, achei que o plugin vim mencionado não estava funcionando com o iTerm2 3.0.15 (para ser justo, não sei se isso ocorreu em versões mais antigas) - mas encontrei esse hack.
Mapeie command-p para colar e use as chaves do iTerm2 vim. Obviamente, isso funciona apenas para o iTerm2.
Como funciona. Eu uso "jk" para entrar no modo de escape, assim você também precisará:
: inoremap jk
no seu .vimrc.
Depois, basta chamar P para entrar no modo de colar ", + p para colar na área de transferência e depois P para desativar o modo de colar. Hth.
fonte