Copié una parte del HTML de una página web y quería guardarlo en un archivo. Para eso comencé una nueva vim sesión en una ventana de terminal, con un (nuevo) nombre de archivo especificado en la línea de comandos, presioné ipara ingresar al modo de inserción y luego CtrlShift+ Vy esperé mientras se [-- INSERT --]mostraba en la parte inferior y esperé ...
Como vimno respondía después de varios segundos, abrí 'Editor de texto' desde el menú Aplicaciones → Accesorios pegué el texto (que apareció en una fracción de segundo, lo guardé con un nuevo nombre, lo cerré y eliminé la sesión de Vim que todavía no se hizo, 1,5 minutos después. La cantidad de texto fue de 186K en 3200 líneas, no excesivo diría, ni con líneas demasiado largas.
¿Hay alguna manera de acelerar este tipo de inserciones vimy / o hay una explicación de por qué esto es tan lento en comparación con el uso del editor de texto, de lo contrario horrible y orientado al mouse?
(El% de CPU según topno supera el 5%, aunque tengo algunos procesadores libres en el sistema, por lo que podría haber algún problema relacionado con E / S, que no existe al leer el mismo texto de un archivo)
Información de la versión:
Ubuntu 12.04
Vim: 7.3, con parches proporcionados por Ubuntu 12.04
bash: 4.2.25
gnome-terminal: 3.4.1.1

vim, pegar y luego vuelve a habilitarlo. También intente usar la:set pastefunción para ver si mejora las cosas. Verlo:help pastedescribe cómovimno hace distinción b / w escribiendo y pegando.vitratar de analizar el archivo al leerlo (después de guardar la forma @ l0b0 sugerida). Pero eso funciona rápido.:set pasteno parece realmente hacer una diferencia (no estoy usando un cronómetro, solo el reloj de pared).Respuestas:
Para guardar una gran cantidad de texto del portapapeles en un archivo rápidamente, puede ejecutar
cat > file.txt, pegar el contenido y luego presionar Ctrl- d.Si tiene instalado xsel , puede hacer
:r !xselpara insertar la selección "primaria" (también conocida como "mouse") en Vim, o:r !xsel -bpara insertar el búfer " Ctrl- portapapeles" ( - c). También puede guardar la selección directamente en un archivo conxsel >file.txtoxsel -b >file.txt. Esto elimina la necesidad de pegar por separado + acciones EOF y evita imprimir todo el búfer de copia en el terminal.Si no tiene xsel sino xclip, los comandos correspondientes son
xclip -outpara la selección primaria oxclip -out -selection clipboardpara el búfer del portapapeles.fuente
Este es un problema de búfer a disco. Vim intenta mantener su trabajo seguro y no asume que puede escribir varios miles de caracteres por segundo. Lea
:help swap-filepara algunos detalles sobre el almacenamiento en búfer. La solución a su problema es esta:Desactive el archivo de intercambio de vim con:
o desde dentro de vim antes de la pasta:
Ver
:help swapfilepara más detalles.Otra opción es simplemente desactivar la sincronización con el disco del archivo de intercambio,
:set swapsync=pero esta opción requiere más pulsaciones de teclas para deshacer y soy flojo. :)¡Desactivar el intercambio no es seguro para las operaciones normales! Inmediatamente después de la pasta, ya sea para uso
:set swapfileo:set swapsync=fsyncpara volver a un comportamiento normal (aunque técnicamente, un comportamiento normal podría haber sido sincronización y no fsync , cheque con:set swapsync?antelación si desea seguir este camino).fuente
Si tiene
xterm_clipboardfunción, puede usar los registros*y+. Estos registros interactúan con el búfer de selección primaria X11 y el portapapeles (respectivamente).Por lo tanto, si ha copiado algo a través de CTRL+ c, puede pegarlo en vim con "+p.
Si simplemente lo ha resaltado sin copiar, puede pegarlo con "*p.
También puede hacer que el
*búfer sea el búfer predeterminado haciendo:set clipboard=unnamed. Entonces cualquier yank ( y), paste ( p), etc., que no especifique un registro usará el*registro. También se agregó Vim 7.3.74clipboard=unnamedplus, que usará el+registro por defecto.También puede copiar cosas en la selección del portapapeles y tampones primarias dando un tirón, por ejemplo: "+yy.
Tenga en cuenta que, como se mencionó, todas estas capacidades necesitan la
xterm_clipboardfunción. Puede ver si tiene esta característica haciendo:versiondentro de vim, ovim --versiondesde el shell, y busque+xterm_clipboard. Si dice-xterm_clipboard, no lo tiene y tendría que volver a compilar vim.fuente
xterm_clipboardes solo si se ejecuta vim desde la terminal.xterm.xterm_clipboardaplica a cualquier emulador de terminal, no solo a xterm. Yo mismo uso urxvt.