Copiei uma parte do HTML de uma página da Web e queria salvá-lo em um arquivo. Para isso, iniciei uma nova vim
sessão em uma janela de terminal, com um (novo) nome de arquivo especificado na linha de comando, pressione ipara entrar no modo de inserção e, em seguida, CtrlShift+ Ve esperei enquanto era [-- INSERT --]
mostrado na parte inferior e esperei ...
Como vim
não respondi após alguns segundos, abri o 'Editor de Texto' no menu Aplicativos → Acessórios, colei o texto (que apareceu em uma fração de segundo, o salvei com um novo nome, fechei e interrompi a sessão do Vim que ainda não foi feito, 1,5 minutos depois.A quantidade de texto era de 186K em 3200 linhas, não excessiva, eu diria, nem com linhas excessivamente longas.
Existe uma maneira de acelerar esse tipo de inserção vim
e / ou existe uma explicação para isso ser tão lento em comparação ao uso do Editor de Texto, que é horrível e orientado ao mouse?
(A porcentagem de CPU de acordo com top
não supera os 5%, embora eu tenha alguns processadores livres no sistema, portanto, pode haver algum problema de ligação de E / S, que não existe ao ler o mesmo texto de um arquivo)
Informações da versão:
Ubuntu 12.04
Vim: 7.3, com patches fornecidos pelo Ubuntu 12.04
bash: 4.2.25
gnome-terminal: 3.4.1.1
vim
, fazer a colagem e, em seguida, reative-o. Tente também usar o:set paste
recurso para ver se ele melhora as coisas. Veja:help paste
como descreve comovim
não faz distinção entre digitar e colar.vi
tentar analisar o arquivo ao ler (depois de salvar o caminho @ l0b0 sugerido) também. Mas isso funciona rápido.:set paste
que parece realmente não faz diferença (não estou usando um cronômetro, apenas o relógio de parede).Respostas:
Para salvar muito texto da área de transferência em um arquivo rapidamente, você pode executar
cat > file.txt
, colar o conteúdo e pressionar Ctrl- d.Se você possui o xsel instalado, pode fazer isso
:r !xsel
para inserir a seleção "primária" (também conhecida como "mouse") no Vim ou:r !xsel -b
para inserir o buffer da "área de transferência" ( Ctrl- c). Você também pode salvar a seleção diretamente em um arquivo comxsel >file.txt
ouxsel -b >file.txt
. Isso elimina a necessidade de ações de colar + EOF separadas e evita a impressão de todo o buffer de cópia no terminal.Se você não possui xsel, mas xclip, os comandos correspondentes são
xclip -out
para a seleção primária ouxclip -out -selection clipboard
para o buffer da área de transferência.fonte
Este é um problema de liberação do disco no buffer. O Vim tenta manter seu trabalho seguro e não pressupõe que você possa digitar vários milhares de caracteres por segundo. Leia
:help swap-file
para alguns detalhes sobre o buffer. A solução para o seu problema é esta:Desative o arquivo de swap do vim com:
ou de dentro do vim antes da pasta:
Veja
:help swapfile
para mais detalhes.Outra opção é simplesmente desativar a sincronização com o disco do arquivo de troca,
:set swapsync=
mas essa opção leva mais pressionamentos de tecla para desfazer e eu sou preguiçoso. :)Desativar a troca não é seguro para operações normais! Imediatamente após a colagem, use
:set swapfile
ou:set swapsync=fsync
para voltar ao comportamento normal (embora tecnicamente, o comportamento normal possa ter sido sincronizado e não fsync , verifique com:set swapsync?
antecedência se você deseja seguir esse caminho).fonte
Se você tiver um
xterm_clipboard
recurso, poderá usar os registradores*
e+
. Esses registradores fazem interface com o buffer de seleção primário X11 e a área de transferência (respectivamente).Portanto, se você copiou algo via CTRL+ c, pode colá-lo no vim com "+p.
Se você simplesmente o destacou sem copiar, pode colá-lo com "*p.
Você também pode tornar o
*
buffer o buffer padrão fazendo isso:set clipboard=unnamed
. Então qualquer puxão ( y), pasta ( p), etc, que não especifique um registro, usará o*
registro. O Vim 7.3.74 também foi adicionadoclipboard=unnamedplus
, que usará o+
registro por padrão.Você também pode copiar as coisas na seleção e prancheta buffers principais por arrancar, por exemplo: "+yy.
Observe que, como mencionado, todos esses recursos precisam desse
xterm_clipboard
recurso. Você pode ver se possui esse recurso fazendo:version
dentro do vim, ou avim --version
partir do shell, e procure+xterm_clipboard
. Se diz-xterm_clipboard
, você não o possui e teria que recompilar o vim.fonte
xterm_clipboard
é apenas se estiver executando o vim a partir do terminal.xterm
.xterm_clipboard
se aplica a qualquer emulador de terminal, não apenas ao xterm. Eu mesmo uso urxvt.