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

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

Ответ 1

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

cat file2 file3 >> file1

Ответ 2

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

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

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

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

Ответ 3

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

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

vim -u "NONE" hugefile.log

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

syntax off

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

Ответ 4

Небольшое улучшение ответа, заданного @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

Ответ 5

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

Ответ 6

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

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

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

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

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

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

Ответ 13

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

Ответ 14

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

Ответ 15

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