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

451
Kyle Strand

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

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

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

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

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

2
Только косвенно связаны, но вот крик на довольно крутой скрипт (не мой, но я запустил его, как только я его нашел), который делает что-то, что Vim должен действительно иметь какую-то встроенную возможность для: https: // github.com/doy/conf/blob/master/bin/clean-vim-undo Kyle Strand 10 лет назад 0

2 ответа на вопрос

2
Ingo Karkat

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

На самом деле следовало бы использовать это в любом случае - спасибо за предложение. Я принимаю другой ответ только потому, что он более специфичен для конкретной проблемы, но также +1 для вашего. Kyle Strand 10 лет назад 0
1
benjifisher

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