Как редактировать многогигабайтные текстовые файлы? Vim не работает = (

Существуют ли какие-либо редакторы, которые могут редактировать текстовые файлы с несколькими гигабайтами, возможно, только загружая небольшие порции в память сразу? Кажется, что Vim не может справиться с этим = (

    Если вы находитесь на * nix (и предполагаете, что вам нужно изменять только части файла (и редко)), вы можете разделить файлы (используя команду split ), отредактировать их индивидуально (используя awk , sed или что-то подобное) и объединить их после того, как вы закончите.

     cat file2 file3 >> file1 

    Ctrl-C остановит загрузку файла. Если файл достаточно мал, вам, возможно, повезло, что он загрузил все содержимое и просто убил любые шаги после загрузки. Убедитесь, что весь файл загружен при использовании этого наконечника.

    Vim может обрабатывать большие файлы довольно хорошо. Я только что отредактировал файл 3.4GB, удалив строки и т. Д. Три вещи, которые нужно иметь в виду:

    1. Нажмите Ctrl-C: Vim пытается сначала прочитать весь файл, чтобы сделать что-то вроде подсветки синтаксиса и количества строк в файле и т. Д. Ctrl-C отменит это перечисление (и подсветку синтаксиса), и оно будет загружать только то, что необходимо отображать на экране.
    2. Readonly: Vim, скорее всего, начнет читать только в том случае, если файл слишком велик для него. копию файла для выполнения изменений. Я должен был! для сохранения файла, и именно тогда это заняло больше всего времени.
    3. Перейдите на :115355 : Ввод текста :115355 приведет вас непосредственно к строке 115355, которая намного быстрее будет проходить в этих больших файлах. Кажется, что Vim начинает сканирование с самого начала каждый раз, когда он загружает буфер строк, и удерживание Ctrl-F для сканирования через файл кажется очень медленным ближе к концу.

    Примечание. Если ваш экземпляр Vim находится в режиме readonly, потому что вы нажимаете Ctrl-C, возможно, что Vim не загрузил весь файл в буфер. Если это произойдет, сохранение его сохранит только то, что находится в буфере, а не весь файл . Вы можете быстро проверить с помощью G чтобы перейти к концу, чтобы убедиться, что все строки в вашем файле есть.

    Это могут быть плагины, которые заставляют его задыхаться. (подсветка синтаксиса, складки и т. д.)

    вы можете запустить vim без плагинов.

     vim -u "NONE" hugefile.log 

    Его минималистский, но он, по крайней мере, даст вам движения vi, к которым вы привыкли.

     syntax off 

    является еще одним очевидным. Обрежьте свою установку и укажите, что вам нужно. Вы узнаете, на что это способно, и если вам нужно выполнить задачу с помощью других средств.

    Небольшое улучшение ответа от @Al pachio с помощью решения split + vim вы можете прочитать файлы с помощью glob, эффективно используя куски файлов в качестве буфера, например

     $ split -l 5000 myBigFile xaa xab xac ... $ vim xa* #edit the files :nw #skip forward and write :n! #skip forward and don't save :Nw #skip back and write :N! #skip back and don't save 

    Возможно, вы захотите проверить этот плагин VIM, который отключает некоторые функции vim в интересах скорости при загрузке больших файлов.

    Я пытался это сделать, в основном с файлами размером около 1 ГБ, когда мне нужно было внести небольшие изменения в дамп SQL. Я нахожусь в Windows, что делает его главной болью. Это серьезно сложно.

    Очевидный вопрос: зачем вам это нужно? Я могу сказать вам по опыту, чтобы попробовать это более одного раза, вы, вероятно, действительно хотите попытаться найти другой путь.

    Итак, как вы это делаете? Есть несколько способов, которыми я это сделал. Иногда я могу получить vim или nano, чтобы открыть файл, и я могу использовать их. Это очень тяжелая боль, но она работает.

    Когда это не работает (как в вашем случае), у вас есть только несколько вариантов. Вы можете написать небольшую программу для внесения необходимых изменений (например, поиск и замена). Вы могли бы использовать программу командной строки, которая может это сделать (возможно, это может быть выполнено с помощью sed / awk / grep / etc?)

    Если они не работают, вы всегда можете разбить файл на куски (что-то вроде split, являющегося очевидным выбором, но вы можете использовать head / tail для получения нужной вам части), а затем отредактировать часть (-ы), которая в ней нуждается, и рекомбинировать позже.

    Поверьте мне, попытайтесь найти другой путь.

    Я думаю, что для шестимерных редакторов достаточно просто обрабатывать огромные файлы. В Windows я использую HxD , который утверждает, что обрабатывает файлы до 8 EB (8 миллиардов гигабайт).

    Я использую vim 7.3.3 на Win7 x64 с плагином LargeFile от Charles Campbell для обработки текстовых файлов с несколькими гигабайтами. Он работает очень хорошо.

    Надеюсь, вы поправитесь.

    Ничего себе, никогда не удалось заставить vim задушить, даже с GB или двумя. Я слышал, что UltraEdit (в Windows) и BBEdit (на компьютерах Mac) еще более подходят для файлов с более высоким размером, но у меня нет личного опыта.

    В прошлом я открывал файл 3 гигабайта с помощью этого инструмента http://csved.sjfrancke.nl/

    Я использовал TextPad для больших файлов журнала, у него нет верхнего предела.

    Лично мне нравится UltraEdit . Вот их небольшая ссылка на большие файлы .

    Я использовал встроенный редактор / просмотрщик FAR Commander для супер-больших файлов журнала.

    Единственное, что я смог использовать для чего-то подобного, это мой любимый Mac hex-редактор, 0XED. Однако это было с файлами, которые я считал большими на десятки мегабайт. Я не уверен, как далеко он пойдет. Я уверен, что он загружает только части файла в память сразу.

    В прошлом я успешно использовал подход split / edit / join, когда файлы становятся очень большими. Для этого вам нужно знать, где находится редактируемый текст, в исходном файле.

    Давайте будем гением компьютера.