Pare o vim colando seleções como texto!

8

Eu tenho usado VI e VIM por anos (30 ou mais) (em xterms, não em sua própria janela, gvim) e eu tenho uma enorme biblioteca de vim comandos que dou ao vim usando o comando botão do meio do mouse como uma seleção.

Por exemplo, eu costumava fazer coisas como ...

 vi {many_hundreds_of_files}
   paste vim commands using mouse - one paste per file.

A seleção incluiria muitos comandos VIM para fazer coisas como substituir teste, formatação, mover linhas, etc., etc., etc., e normalmente termina com: w e: próximos comandos VIM, no final de a seleção, então o vim está pronto para eu colar novamente no próximo arquivo. Isso me permite atualizar um grande número de arquivos de maneiras MUITO complexas, sem precisar de scripts especiais (como a edição no local do perl) para fazê-lo.

Durante meu último patch de sistema (Fedora 25) o vim agora cola a seleção do mouse AS TEXT e não como comandos vim, e não consigo pará-lo!

Ainda funciona bem em outro sistema (Fedora 24).

Se eu quiser colar como texto, eu entro no modo de inserção antes de colar! Não quero que o VIM cole automaticamente as seleções como texto quando não estiver no modo de inserção. Eu entendo que isso foi feito como um recurso de segurança, mas para mim é um problema de usabilidade MAIOR.

Eu tentei voltar a namorar entradas terminográficas (xterm-256color) de uma máquina que não faz isso (especialmente a entrada terminfo "kmous"). Eu também olhei para o vim ": set mouse=" setting (que é null!). Eu não sei se é o xterm (duvidoso), ou algo que mudou no VIM (provável), e alterar logs e google foram inúteis.

Nada, no entanto, parece me dar o velho comportamento.

    
por anthony 10.05.2017 / 03:32

1 resposta

10
Bem depois de passar por um monte de páginas da web, muitas dando algumas dicas que não parecem funcionar, eu encontrei uma dica (texto extra em torno de uma pasta) que me levam à causa e à solução do problema.

Parece que o vim incorporou um número de entradas termcap 'falsas' que ele usa quando reconhece terminais específicos (e às vezes fica errado, embora não esteja errado neste caso).

As configurações de termcap no vim são numerosas e, como tal, NÃO aparecem em uma lista de configurações normal ": set all". Para vê-los, você precisa usar ": set termcap". A configuração específica do termo "não padrão" é "t_BE" (consulte vim ": help t_BE"). A ajuda integrada "xterm-bracketed-paste" explica essa configuração de termcap interno-a-vim.

Basicamente, se esta configuração é definida (neste caso pelo Vim não termcap / terminfo), então o vim irá enviá-lo para o xterm quando for iniciado, informando ao xterm para adicionar códigos especiais em qualquer texto que o usuário cole de uma fonte externa . Quando o vim os vê automaticamente, ele não apenas entra no modo de inserção, mas também configura o "modo de colar" para não formatar o texto.

O mais tardar (modo colar) é muito útil! O primeiro é o que tem me dado todo o problema.

A solução de força bruta é desabilitada entre colchetes e pastas, adicionando isso ao ".vimrc"

:set t_BE=

Uma solução alternativa ....

Em vez de desabilitar completamente a pasta entre colchetes, pare o vim entrar em ação quando vir a sequência inicial de uma pasta do terminal (do mouse), enquanto estiver no comando ou no modo normal.

:nmap <PasteStart>  <NOP>
:nmap <PasteEnd>    <NOP>
:cmap <PasteStart>  <NOP>
:cmap <PasteEnd>    <NOP>

Usar isso significa que, se você colar o texto enquanto estiver no modo de inserção, o vim não tentará formatar (recuar) o texto que provavelmente já foi recuado.

Isso não significa que não seja mais necessário alternar o modo de colagem, pois também uso a alternância de modo de colagem (mapeada para F2) para desabilitar "showbreak" e "listchars" (exibição de linhas quebradas, guias, no-break espaços e espaços extras no final das linhas). Eu ainda precisaria colocar o vim nesse modo quando quiser fazer seleções de mouse para colar em outro lugar.

Comentários e Sugestões sobre as soluções são bem-vindos.

    
por 11.05.2017 / 03:04

Tags