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