Tengo un archivo de respaldo de base de datos MySQL de 100MB y tengo problemas para abrirlo en Vim en mi caja Linux que tiene 16G de RAM.
Vim simplemente se cuelga (al menos inutilizable). Esto es algo que no entiendo. Tengo 16 GB de RAM, ¿por qué no puedo cargar un archivo de 100 MB en un editor?
¿Es por Vim? Pensé que toda la gestión de la memoria es manejada por el sistema operativo.
hexer
.Respuestas:
Vim a veces tiene problemas con los archivos que tienen líneas inusualmente largas. Es un editor de texto, por lo que está diseñado para archivos de texto, con longitudes de línea que generalmente tienen un máximo de cientos de caracteres de ancho.
Un archivo de base de datos puede no contener muchos caracteres de nueva línea, por lo que posiblemente podría ser una sola línea larga de 100 Mb. Vim no estará contento con eso, y aunque probablemente funcionará, puede llevar bastante tiempo cargar el archivo.
Ciertamente he abierto archivos de texto mucho más grandes que 100 Mb con Vim. El archivo ni siquiera necesita caber en la memoria de una vez (ya que Vim puede intercambiar cambios en el disco según sea necesario).
fuente
set synmaxcol=120
(o algún otro número apropiado). He notado grandes aceleraciones de esto en el pasado.En mi experiencia, Vim no se ahoga en archivos grandes , sino en líneas largas . Use este comando para
mysqldump
usar líneas más cortas a expensas de un archivo más grande :Además, puede abrir Vim y pedirle que no analice su
.vimrc
archivo ni cargue ningún complemento con este comando:Cargar Vim de esta manera usará menos memoria y no requerirá que Vim analice el archivo completo como hacen muchos complementos.
fuente
"cargar VIM sin .vimrc y complementos (limpiar VIM), por ejemplo, para archivos ENORMES
fuente
Intente usar en
less
lugar devim
si desea ver un archivo grande directamente. Vim intenta hacer muchas cosas diferentes cuando se carga por primera vez: escaneando el archivo (potencialmente en múltiples pasadas) para tratar de determinar qué sintaxis usar, realizando resaltado de sintaxis y buscando modelinas en la parte superior e inferior del archivo. Luego, a medida que edita el archivo, vim guarda archivos de intercambio y mantiene árboles de deshacer (el historial de deshacer en vim se ramifica, no es lineal como en cualquier otro editor?), Y reevalúa constantemente el resaltado de sintaxis a medida que cambia el texto, etc.Nada de eso es necesariamente una justificación de por qué debe ser tan inutilizable con archivos gigantes, pero es más una explicación de algunas de las razones por las que lo es.
fuente
Vim no solo carga el archivo tal como está en la memoria. Lo convierte en estructuras internas (líneas, palabras, etc.), resalta la sintaxis utilizando un lenguaje de script interno, etc. todo lo cual consume memoria (mucho más que un byte para un personaje) y tiempo de CPU.
fuente
Puede intentar cargarlo como binario. He tenido suerte con eso para archivos realmente grandes, sin texto
También es posible que IIRC use vim como editor hexadecimal, consulte: http://usevim.com/2012/06/20/vim-binary-files/
fuente
Esperemos que su problema tenga más que ver con la necesidad de VIM de archivos temporales (como el intercambio) más que RAM.
En muchos casos, los archivos temporales creados por VIM están en el mismo directorio del archivo que está abriendo. Si este es su caso, puede verificarlo verificando el espacio disponible en disco en el directorio actual.
Afortunadamente, hay buena documentación sobre cómo puede especificar una ubicación diferente para los archivos de indexación / intercambio de VIM:
También puede deshabilitar el archivo de intercambio
fuente
Ocasionalmente abro grandes copias de seguridad de bases de datos en formato de texto .sql. Los archivos muy grandes o los archivos con líneas muy largas a menudo parecen tardar mucho tiempo en abrirse en vim. Esto podría estar relacionado con el procesamiento de sintaxis y el resaltado de color, como se menciona en las respuestas de @zzapper y @demonkoryu.
Una solución rápida podría ser presionar "control-G" durante la carga del archivo para cancelar el procesamiento previo de resaltado de sintaxis.
fuente