Як я можу відновити вихідний файл із .swp-файлу?


57

Я спробував відкрити файл .swp , використовуючи viі , catале вона показує сміття.


Ви використовуєте vi чи vim?
— frabjous

Це працює з emacs? (або піднесений, нано, ред. тощо)
— відвертий

Відповіді:


94
vim -r .swp

Це переходить у режим відновлення та надає більше інформації. Я думаю, це те, чого ти хочеш.

.swX-файли залишаються позаду, якщо сеанс із збереженим файлом знищений / збивається / трапляється щось інше погане. Вони також присутні під час відкриття незбереженого буфера в сеансі Vim. vim -rчитає ці тимчасові файли та відтворює вміст. Після того, як ви відновити його, просто збережіть його , як зазвичай, наприклад :w newfilename.


8
Саме те, що я шукав. Для будь-кого іншого, саме так ви відновлюєте збережені файли. Вищеописані методи добре працюють, якщо файл уже існує, але ви не можете відкрити файл без імені.
— Ерік Ху

17

Для відновлення .swp не потрібно мати оригінальний файл. Просто відкрийте файл так, ніби він існує. vim шукатиме файл із розширенням .swp та пропонує відновити його.

наприклад:

$ ls -a
. .. .test.txt.swp
$ vim test.txt
[...]
Swap file ".test.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

Просто натисніть R, щоб відновити його, і: wq файл

Редагувати: Зауважте, що .swp файл містить лише зміни, внесені до файлу (див. Коментар). Це означає, що вам потрібно буде отримати останню копію файлу із резервної копії, а потім використати vim для відновлення останніх змін. Якщо у вас немає резервної копії файлу, вам справді не пощастило.


2
Ви обов'язково повинні мати оригінальний файл, без нього дані у .swp-файлі марні. Див. ": Help swap-file". Бувають ситуації, коли може здатися, що він працює без оригінального файлу, але файл .swp зберігає лише зміну інформації і вимагає певної відправної точки, щоб застосувати цю інформацію під час відновлення.
— Гептит

Ви праві, звичайно. Я фактично не знав цього про vim. Але це цілком логічно, оскільки зберігання повної копії оригінального файлу було б величезною тратою. Тоді відповідь: Відновіть файл із резервної копії, а потім використовуйте vim, щоб відновити останні зміни.
— Вегар Вестерлунд

Збереження всього файлу за один проміжок часу було б марним, так, але я бачу потенційне значення в накопиченні файлів swp (коли це увімкнено.) З тієї ж причини ви редагуєте через diff і виправляєте оригінал лише при явному збереженні, для мене це має сенс якщо ви можете створити послідовність розрізків, генеруйте часткову суму (дати до сьогодні -> ніч; ніч + сьогодні = поточний) тощо. Я знайшов ': pre [serve] `в мануелі, я думаю, що це працює саме так. У будь-якому випадку, найважливіший рядок:The original file is no longer needed for recovery.
— Іван П

Схоже, це працює - :preserveі :set cpoptions=...&залишає у каталозі .swp та .swo файл і пропонує відновити з будь-якого. Використовуючи vim -r <file>ви можете обирати між .swp та .swo. Подальші зміни редагують .swn, .swm тощо, які, як видається, є частковою сумою свопів до цього моменту. Ви можете повернутися до версії за своїм смаком і відредагувати (~ = вилка) або зберегти (~ = сховище). Врешті-решт, ви можете відзначити розміщення файлів своп, демонструвати їх резервні копії тощо. Я можу помилитися з деталями, коли мова йде про більші файли - я не впевнений, як це впливає на додаткові файли підкачки - див. Нижче.
— Джон П

(Продовження) - буфер містить прапори, і саме буфер створює файли swap, тому навіть якщо прапори не встановлені з глобальної конфігурації або автозавантаження, вони успадковуються під час самого відновлення. Щоб замінити послідовність відновлення одним файлом відновлення, ви можете перемістити swap, який ви хочете .swp, і приховати решту. Я хотів би дізнатися більше про збіг між відновленням файлів та управлінням сеансом Vim, якщо хтось може заповнити прогалини.
— Джон П



7

Прочитавши коментарі Вегара Вестерлунда та Гептита, я хотів дізнатися, в який момент vim потрібен оригінальний файл (або резервна копія) для відновлення з .swp-файлу. Ось що було:

Я відкрив файл 975 рядків, відредагував його в рядку 949 (створив .swpфайл) і вбив процес, а потім видалив оригінал. $ vim Original_Fileзапитав, чи хочу я відновитися після .swp »> так; фактично було відновлено лише перші 68 рядків та останні 34 рядки (починаючи з 8 рядків вище моєї редакції).

Потім я повторив тест з меншими файлами: від 20 до 200 рядків .swp файл містив 100% початкового вмісту. Але в 300 рядках лише перші 68 і 18 останніх рядків (починаючи з 2 рядків вище моєї редакції) були включені до .swp.

Як висновок, добре знати, що vim завжди зберігає "заголовок" і "дно" у файлах .swp. Можливо, є налаштування, щоб контролювати, скільки рядків має містити .swp?

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