2

Я просто скопировал огромное количество текста (я думаю, порядка миллионов строк) в регистр Vim, открыл новый файл, вставил, а затем приступил к редактированию новой копии отрывка. Вим был достаточно быстр на протяжении всего процесса; это была хорошая демонстрация силы Вима.

.... кроме того, что я использую постоянную функцию отмены. Поэтому, потратив немного времени на редактирование, я заметил, что мой сеанс Vim занимал огромный объем памяти (примерно в 3 раза больше, чем мой сеанс Chrome, что по стандартам Vim значительно). Сначала я подумал, что это потому, что моя массивная копия все еще была в одном из регистров, но когда я приступил к редактированию .viminfo , самое длинное значение регистра было около 20 строк. Я пытался перезапустить Vim несколько раз, но каждый раз, когда он загружал этот конкретный файл, он зависал недопустимо (опять же, по стандартам Vim).

...Поэтому я понял, что мне нужно удалить файл отмены для проблемного файла. Это решило мою непосредственную проблему, но я хотел бы избежать встречи с ней снова. Поэтому я хотел бы использовать autocmd в моем VimRC, который будет делать следующее:

  • После загрузки файла проверьте размер соответствующего файла отмены (если он существует)
  • Если размер файла отмены превышает x Mb (или любой другой размер), выполните одно из следующих действий:
    • Удали это
    • Сохраняя только самые последние изменения, удаляйте изменения до тех пор, пока размер файла не станет приемлемым (это предпочтительное поведение)

Есть мысли о том, как это сделать?

2 ответа2

2

LargeFile - плагин для редактирования больших файлов, быстро обнаруживает большие файлы и настраивает множество параметров, чтобы приспособиться к этому лучше. Он также отключает 'undolevels' чтобы избежать такого большого увеличения памяти, которое вы видели.

1

От undo-persistence:

The 'undofile' option is checked after writing a file, before the BufWritePost
autocommands.  If you want to control what files to write undo information
for, you can use a BufWritePre autocommand: >
    au BufWritePre /tmp/* setlocal noundofile

Я собирался предложить вам решить, прежде чем записывать файл отмены, насколько большим он будет, а затем решить, установить ли 'undofile' . Вероятно, проще позволить vim записать файл, а затем использовать BufWritePost чтобы проверить размер вновь записанного файла и, если он слишком большой, удалить его.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .