Uso o VI e o VIM há anos (30 ou mais) (no xterms, não em sua própria janela, gvim) e tenho uma enorme biblioteca de comandos do vim que dou ao vim usando o 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 do VIM para fazer coisas como substituir teste, formatação, mover linhas, etc., etc., etc., e geralmente termina com: we: próximos comandos do VIM, no final da 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 a necessidade de scripts especiais (como edição local no perl) para fazer isso.
Algumas dessas pastas de comando do vim têm mais de 200 linhas (armazenadas em arquivos de texto que eu pop-up na tela e em "copiar tudo"!) Isso faz muitas alterações no conjunto de milhares de arquivos que estou reformatando. somente para o conjunto específico de arquivos, não para o meu trabalho diário do vim.EG: Re-formatação em massa para arquivos de texto / dados.
O problema...
Durante o meu último patch do sistema (Fedora 25), o vim agora cola a seleção do mouse como texto e não como comandos do vim, e parece que não consigo parar!
Ainda funciona bem em outro sistema (Fedora 24).
Se eu quiser colar como texto, 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. Entendo que isso foi concebido como um recurso de segurança, mas, para mim, é um MAIOR problema de usabilidade.
Tentei voltar atrás com entradas terminfo (xterm-256color) a partir de uma máquina que não faz isso (especialmente a entrada terminosa "kmous"). Também observei a configuração ": set mouse =" do vim (que é nula!). Eu não sei se é o xterm (duvidoso), ou algo que mudou no VIM (provável), e os logs de alterações e o google foram inúteis.
Nada, no entanto, me parece o comportamento antigo.
vim
mudança: como é possível sabervim
dentro dexterm
algo que é inserido através do teclado ou colado através do botão do mouse? Eu não conheço esse mecanismo. Por outro lado,xterm
sabe que está em execuçãovim
para que possa decidir cercar a colagem comi
<esc>. Tente (a) com um tipo diferente de janela do terminal e (b) uma cópiavim
com um nome diferente. Isso deve ajudar a restringir a causa do problema.vim
esteja seqüestrando seu método de colar. Talvez tente ssh'ing ou telneting em sua máquina e colando dessa maneira. Se você possui uma caixa do Windows, use o putty para ssh na sua máquina Fedora25 e cole dessa maneira.gvim.exe
(graphical-vim) e linha de comandovim.exe
. Cole "itext" no gvim.exe e você obtémitext
. Cole-o no vim.exe e você obterátext
pastetoggle
opção?Respostas:
Bem, depois de passar por muitas páginas da web, muitas dando algumas dicas que pareciam não funcionar, encontrei uma dica (texto extra em torno de uma pasta) que me levou à causa e à solução do problema.
Parece que o vim incorporou nele várias entradas 'falsas' do termcap que ele usa quando reconhece terminais específicos (e às vezes erra, embora não esteja errado nesse caso).
As configurações do Termcap no vim são numerosas e, como tal, NÃO aparecem na lista de configurações ": set all" normais. Para vê-los, você precisa usar ": set termcap". A configuração específica do termocap 'não padrão' é "t_BE" (consulte vim ": help t_BE"). A ajuda embutida "xterm-bracketed-paste" explica essa configuração de termcap interna para vim.
Basicamente, se essa configuração for definida (neste caso pelo Vim, não termcap / terminfo), o vim o enviará ao xterm quando for iniciado, o que instrui o xterm a adicionar códigos especiais ao redor de qualquer texto que o usuário cole de uma fonte externa. Quando o vim os vê, entra automaticamente não apenas no modo de inserção, mas também define o 'modo de colar' para não formatar o texto.
Quanto mais tarde (modo de colagem), acho MUITO útil! O primeiro é o que tem me causado todo o problema.
A solução de força bruta é desativar a pasta entre colchetes adicionando isso ao ".vimrc"
Uma solução alternativa ....
Em vez de desativar completamente a pasta entre parênteses, pare o vim de executar uma ação quando vir a sequência inicial de uma pasta de terminal (do mouse), enquanto estiver no comando ou no modo normal.
Usar isso significa que, se você colar texto enquanto estiver no modo de inserção, o vim não tentará formatar (recuar) o texto que provavelmente já está recuado.
Isso não significa que não preciso mais alternar o modo de colar, pois também uso o alternar do modo de colar (mapeado para F2) para desativar "showbreak" e "listchars" (exibindo linhas quebradas, guias, espaços sem interrupção e espaços extras no final das linhas). Eu ainda precisaria colocar o vim nesse modo quando desejar fazer seleções de mouse para colar em outro lugar.
Comentários e sugestões sobre as soluções são bem-vindos.
fonte