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 vim
no 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 vim
y / 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 top
no 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 paste
función para ver si mejora las cosas. Verlo:help paste
describe cómovim
no hace distinción b / w escribiendo y pegando.vi
tratar de analizar el archivo al leerlo (después de guardar la forma @ l0b0 sugerida). Pero eso funciona rápido.:set paste
no 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 !xsel
para insertar la selección "primaria" (también conocida como "mouse") en Vim, o:r !xsel -b
para insertar el búfer " Ctrl- portapapeles" ( - c). También puede guardar la selección directamente en un archivo conxsel >file.txt
oxsel -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 -out
para la selección primaria oxclip -out -selection clipboard
para 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-file
para 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 swapfile
para 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 swapfile
o:set swapsync=fsync
para 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_clipboard
funció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_clipboard
función. Puede ver si tiene esta característica haciendo:version
dentro de vim, ovim --version
desde el shell, y busque+xterm_clipboard
. Si dice-xterm_clipboard
, no lo tiene y tendría que volver a compilar vim.fuente
xterm_clipboard
es solo si se ejecuta vim desde la terminal.xterm
.xterm_clipboard
aplica a cualquier emulador de terminal, no solo a xterm. Yo mismo uso urxvt.