Muda automaticamente para o modo colar ao colar da área de transferência

1

Até onde eu sei, não há evento autocmd para copiar e colar. Então, fiquei curioso para saber se é possível escrever um script que alterna o modo colar quando a área de transferência é usada para colar. Se ele puder manipular Shift + Insert , Ctrl + Shift + v e o botão do meio do mouse, ou mesmo o script interno, isso seria incrível, mas eu estou procurando principalmente resolver o caso com atalhos de teclado. Meu vim tem o atributo -clipboard .

    
por Forethinker 11.03.2013 / 09:18

3 respostas

2

Quando você usa o GVIM ou cola usando os comandos p / i_CTRL-R junto com um registro "* ou "+ , o Vim reconhece a pasta e tudo deve funcionar bem. O que você está se referindo é, presumivelmente, a configuração 'pastetoggle' , que é usada para alternar o modo "colar" ao colar através do terminal (por exemplo, com o botão do meio do mouse ou um atalho do terminal). A razão pela qual o modo e o toggle mapping existem é exatamente que o Vim não é capaz de detectar se o texto vem do usuário digitando ou colando.

Você poderia, de alguma forma, ensinar seu terminal a enviar a chave 'pastetoggle' do Vim antes e depois de colar (quando o Vim estiver atualmente em execução); isso não pode ser resolvido apenas no Vim.

    
por 11.03.2013 / 09:38
0

Minha pergunta é realmente falha, pois não reflete exatamente o que eu queria, mas agora eu tenho o que eu quero. Pelo menos na minha configuração ( set nopaste , set autoindent , copyindent , smarttab estão definidas), eu obtenho a pasta de estilo colar com p ou P e pasta nopaste com Ctrl-Shift-v no modo de inserção. Se eu colar com Ctrl-Shift-v no modo normal, obtenho um comportamento estranho.
Minhas configurações podem não imitar pastetoggle configurações de forma idêntica e não responde à pergunta no título, mas resolve o problema que tive. Eu testei em ambos no mintty e no terminator.

    
por 12.03.2013 / 21:12
0

Eu tenho abaixo de map definido no vim:

set mouse=inv
noremap <MiddleMouse> :set paste<CR>"*p:set nopaste<CR>

Você pode adicionar esta linha em ~/.vimrc ou ~/.exrc .

Acho que isso é bastante simples & não exigiria muita explicação.
(Re) mapear middlemouse para definir o modo de colagem e, em seguida, colar o conteúdo de * register & em seguida, desmarque o modo de colar.
Você precisa do suporte do mouse para isso.

Nota: Como já sugerido nos comentários sobre a questão, não é a maneira correta de colar texto no vim. Mas agora temos o hábito de colar no linux. Então, esse mapeamento é útil.

Testado no vim 7.4 no gnome-terminal via putty + xming.

    
por 03.03.2015 / 13:06