Не загружайте файл отмены, если он слишком велик в Vim 7.3+

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

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

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

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

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

2 ответа

Решение

От 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 Автокоманда проверяет размер вновь записанного файла и, если он слишком большой, удаляет его.

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

Другие вопросы по тегам