Ultimamente, tenho precisado colar grandes blocos de texto no editor VIM com frequência, e notei que a operação parece ser executada linha por linha. Ou seja, se eu pressionar ESC ou digitar qualquer coisa durante a colagem, ela é interrompida instantaneamente.
Gostaria de saber se existe uma maneira de tornar a colagem "atômica" — garantindo que todo o conteúdo seja colado de uma vez, ignorando qualquer pressionamento de tecla intermediário?
Reproduzível no Linux RHEL e no macOS.
Somente usando o comando "colar" do próprio Vim. O
"+
registro corresponde à área de transferência do sistema operacional; se o Vim for compatível com ele, ele"+p
colaria seu conteúdo atomicamente.Se a sua versão do Vim não foi criada com a área de transferência do X11 ou do macOS,
:r !some_command
você pode ler a área de transferência usando uma ferramenta externa (por exemplo, xclip no Linux).A colagem baseada em terminal não pode ser facilmente transformada em algo totalmente atômico – em teoria, poderia, mas suspeita-se que exigiria alterações no código. Se ela é interrompível ou não dependerá do emulador de terminal que você estiver usando; o aplicativo de terminal pode forçar você a esperar até que todo o texto "colado" seja gravado no tty em vez de interromper a colagem, embora o Vim ainda a considere como uma entrada de texto incremental.
Muitos emuladores de terminal informam ao Vim que o texto está sendo colado em vez de inserido manualmente (evitando recuos automáticos indesejados, etc.), circundando-o com sequências de "colar colchetes". Portanto, seu terminal deve permitir que a colagem seja ininterrupta; deve suportar colagem entre colchetes; e o Vim deve tratar toda a entrada entre sequências de colchetes como uma única unidade para fins de "desfazer". Não sei se tudo isso é fácil de fazer e, de qualquer forma, ainda será mais lento do que colar no Vim a partir de
"+
.