Автоматично зберігає Vim?


13

Від :help swap-file:

Оновлення swapfile

Файл підкачки оновлюється після введення 200 символів або коли ви нічого не набрали протягом чотирьох секунд. Це трапляється лише в тому випадку, якщо буфер був змінений, а не тоді, коли ви лише переміщалися. Причина, чому він не оновлюється постійно, полягає в тому, що це занадто сповільнить нормальну роботу. Ви можете змінити 200 символів за допомогою параметра "updatecount". Ви можете встановити час за допомогою опції 'updatetime'. Час задається в мілісекундах. Після запису у файл підкачки Vim синхронізує файл на диску. Це потребує певного часу, особливо на зайнятих системах Unix. Якщо ви цього не хочете, ви можете встановити параметр 'swapsync' у порожній рядок. Однак ризик втратити роботу стає більшим. У деяких системах, що не є Unix (MS-DOS, Amiga) файл swap взагалі не записується.

З цього у мене є кілька питань:

  1. Чи означає це, що Vim час від часу автоматично зберігає вашу роботу?

  2. Msgstr "Після запису у файл підкачки Vim синхронізує файл на диску." Що це означає? Це перегляд того, що файл записується спочатку в пам'ять, а потім на диск чи це щось інше?

  3. Скажіть, я беру на замітки заняття: пишу швидко і мені мало потрібно виходити з режиму Вставка. Але я багато разів переходжу на «Нормальний» лише для того, щоб зберегти свою роботу. Чи потрібно це робити чи чи Vim переконається, що більша частина моєї роботи збережена, навіть якщо я не виходжу з режиму Вставка?

Відповіді:


9
  1. Так, це дозволяє економити для заміни файлу.

Ви можете зробити швидкий тест, щоб відчути це. Перейдіть до каталогу. Скажіть vim notest.txtі напишіть якийсь текст. Вам навіть не потрібно зберігати файл.

Якщо ви перелічите файли в робочому каталозі, ви знайдете файл свопу. Скопіюйте його в інший каталог (де, наприклад, у вас немає файлу "notes.txt") vim notest.txt.

Ви отримуєте примітку про наявний своп, його модифікацію та параметри відкривати лише для читання, відновлення тощо. Виберіть відновлення та вуаля! "Копія" вашого файлу.

  1. Так, своп проводиться в пам'яті.

Коли Vim читає файл, він додає його до оперативної пам'яті. Це є і для існуючих, і для нових (ще збережених файлів). По мірі збереження swap він видається на диск. Жорсткий диск. З ОЗП.

  1. Так і ні.

За допомогою налаштувань за замовчуванням більшість вашої роботи зберігається. Це стосується кожні 200 введених символів або коли у вас 4-секундна пауза. Хоча я довіряю збереженню файлу swap, я люблю зберігати свою роботу, коли знаю, що перебуваю в нестабільній системі. Але, сказане, досить впевнено тримати роботу, якщо не буде дуже нещасливим і система хостингу впаде в паніку відразу після написання дуже важливого речення.

Коротше кажучи, досить заощадити, коли лекція закінчиться. Якщо система з якихось причин зупиниться в середині класу, робота залишається в свопі.

Звичайно: Якщо вам дуже не пощастить, може статися збій під час написання файлу swap. В результаті файл swap може бути пошкоджений. Ніколи цього не відчували, і не знаєте, які частини файлу можуть бути зіпсовані, але, можливо, варто подумати. Оскільки файл підкачки є двійковим (за відсутності кращого слова), то, мабуть, це причина, що він більш крихкий, ніж звичайний текстовий файл.


В якості побічної ноти. Принаймні, коли використовується робоча директорія для swap, файл swap є агностичним за місцем розташування, коли мова йде про відновлення. Ви можете скопіювати файл swap на нове місце та відновити його як новий файл. Зауважте лише, що ім'я файлу важко закодовано в своп. Як такого ви не можете сказати:

cp .foo.txt.swp .bar.txt.swp

і

vim bar.txt

і очікуйте, що файл swap foo.txt.

Якщо ви дуже зацікавлені, ви можете зробити (на * nix):

xxd -s 108 -l 800 -ps .foo.txt.swp | xxd -r -p

щоб отримати шлях (з деякими химерностями) вихідного файлу. Як ви побачите, додається повний шлях, наприклад:

~user/blah/blah/notes.txt

але при перевірці свопом використовується лише ім'я бази .

З цього приводу ви також можете перевірити vim -rпараметр - який перераховує файли для обміну в поточних та нижчих каталогах. Дивіться :h crash-recoveryз підтемами.


0

Для мене добре зберігати буфер, коли текст змінюється:

autocmd TextChanged,TextChangedI <buffer> silent write

Я знайшов це тут . Це працює для мене.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.