Posso acelerar colando no vim?

8

Copiei uma parte do HTML de uma página da web e queria salvá-la em um arquivo. Para isso eu iniciei uma nova sessão vim em uma janela de terminal, com um nome de arquivo (novo) especificado na linha de comando, tecle i para entrar no modo de inserção e então Ctrl Deslocou + V e esperou enquanto [-- INSERT --] aparecia na parte inferior e esperou ...

Como vim não respondia após alguns segundos, abri o 'Editor de texto' do menu Applications → Accessoiries colando o texto (que apareceu em uma fração de segundo, salvou-o com um novo nome, fechado, e matou a sessão do Vim que ainda não foi feita, 1,5 minutos depois. A quantidade de texto era 186K em 3200 linhas, não excessivas, eu diria, nem com linhas excessivamente longas.

Existe uma maneira de acelerar esses tipos de inserções em vim e / ou há uma explicação de por que isso é tão lento comparado ao uso do Editor de Texto, de outra forma horrível e orientado ao mouse?

(O% de CPU de acordo com top não é superior a 5%, embora eu tenha alguns processadores livres no sistema, então pode haver algum problema de I / O, que não existe ao ler o mesmo texto de um arquivo)

Informação 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

    
por Anthon 09.07.2014 / 14:13

3 respostas

10

Para salvar um monte de texto da área de transferência para arquivar rapidamente, você pode executar cat > file.txt , colar o conteúdo e pressionar Ctrl - d .

Se você tiver xsel instalado, você pode fazer :r !xsel para inserir o "primário" (também conhecido como "mouse") no Vim, ou :r !xsel -b para inserir o buffer "clipboard" ( Ctrl - c ). Você também pode salvar a seleção diretamente em um arquivo com xsel >file.txt ou xsel -b >file.txt . Isso elimina a necessidade de ações separadas de colar + EOF e evita imprimir todo o buffer de cópia no terminal.

Se você não tiver xsel mas xclip, os comandos correspondentes serão xclip -out para a seleção principal ou xclip -out -selection clipboard para o buffer da área de transferência.

    
por 09.07.2014 / 14:21
2

Este é um problema de buffer-flush-to-disk. O Vim tenta manter seu trabalho seguro e não assume que você pode digitar vários milhares de caracteres por segundo. Leia :help swap-file para alguns detalhes sobre o armazenamento em buffer. A solução para o seu problema é esta:

Desative o swapfile do vim com:

vim -n <your file>

ou de dentro do vim antes da pasta:

:set noswapfile

Veja :help swapfile para mais detalhes.

Outra opção é simplesmente desligar a sincronização para o disco do arquivo de troca com :set swapsync= , mas essa opção leva mais pressionamentos de tecla para desfazer e eu sou preguiçoso. :)

A desativação da troca não é segura 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 < em> sync e não fsync , verifique com :set swapsync? se você quer seguir esse caminho).

    
por 26.11.2014 / 03:19
1

Se você tiver o recurso xterm_clipboard , poderá usar os registros * e + . Esses registros fazem interface com o buffer de seleção principal do X11 e com a área de transferência (respectivamente).

Assim, se você copiou algo através de CTRL + c , você pode colá-lo em vim com " + p .

Se você simplesmente o realçou sem copiar, você pode colá-lo com " * p .
Você também pode tornar o buffer * o buffer padrão fazendo :set clipboard=unnamed . Então, qualquer yank ( y ), colar ( p ), etc, que não especifique um registrador, usará o * register. O Vim 7.3.74 também adicionou clipboard=unnamedplus , que usará o registro + por padrão.

Você também pode copiar coisas para a seleção principal & buffers de área de transferência por yanking, por exemplo: " + y y .

Note que, conforme mencionado, todos esses recursos precisam do recurso xterm_clipboard . Você pode ver se tem esse recurso fazendo :version dentro do vim ou vim --version do shell e procurando +xterm_clipboard . Se ele diz -xterm_clipboard , você não tem isso e teria que recompilar o vim.

    
por 09.07.2014 / 15:36

Tags