Làm cách nào tôi có thể khôi phục tệp gốc từ tệp .swp?


57

Tôi đã thử mở tệp .swp bằng cách sử dụng vicatnó hiển thị rác.


Bạn đang sử dụng vi hay vim?
frabjous

Điều này có làm việc với emacs? (hoặc cao siêu, nano, ed, v.v.)
thẳng thắn

Câu trả lời:


94
vim -r .swp

Điều này đi vào chế độ phục hồi và cung cấp cho bạn thêm thông tin. Tôi nghĩ rằng đây là những gì bạn muốn.

.swX-files bị bỏ lại nếu một phiên có tệp chưa được lưu bị hủy / sự cố / điều gì đó xấu xảy ra. Chúng cũng có mặt trong thời gian bộ đệm chưa lưu được mở trong phiên Vim. vim -rđọc các tập tin tạm thời và tạo lại nội dung. Sau khi bạn đã phục hồi nó, chỉ cần lưu nó như bình thường, ví dụ :w newfilename.


8
Chính xác những gì tôi đang tìm kiếm. Đối với bất kỳ ai khác, đây là cách bạn khôi phục các tệp chưa được lưu . Các phương pháp trên hoạt động tốt nếu một tệp đã tồn tại, nhưng bạn không thể mở tệp không có tên.
Eric Hu

17

Bạn không cần phải có tệp gốc để khôi phục .swp. Chỉ cần mở tập tin như thể nó tồn tại. vim sẽ tìm tệp có phần mở rộng .swp và đề nghị khôi phục nó.

ví dụ:

$ 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:

Chỉ cần nhấn R để khôi phục nó và: wq tập tin

Chỉnh sửa: Lưu ý rằng tệp .swp chỉ chứa các thay đổi được thực hiện đối với tệp (xem bình luận). Điều này có nghĩa là bạn sẽ cần tìm nạp một bản sao gần đây của tệp từ bản sao lưu và sau đó sử dụng vim để khôi phục các thay đổi mới nhất. Nếu bạn không có bản sao lưu của tập tin, bạn thực sự không gặp may.


2
Bạn chắc chắn phải có tệp gốc, nếu không có nó, dữ liệu trong tệp .swp là vô ích. Xem ": trợ giúp trao đổi tập tin". Có những tình huống có thể nó hoạt động mà không có tệp gốc, nhưng tệp .swp chỉ lưu trữ thông tin thay đổi và yêu cầu một số điểm bắt đầu để áp dụng thông tin đó trong quá trình khôi phục.
Heptite

Bạn đúng, tất nhiên. Tôi thực sự không biết điều này về vim. Nhưng nó chỉ hợp lý khi lưu trữ một bản sao hoàn chỉnh của tệp gốc sẽ là một sự lãng phí rất lớn. Sau đó, câu trả lời là: Khôi phục tệp của bạn từ bản sao lưu, sau đó sử dụng vim để khôi phục các sửa đổi mới nhất.
Vegar Westerlund

Lưu trữ toàn bộ tệp trong một swp sẽ gây lãng phí, vâng, nhưng tôi thấy giá trị tiềm năng trong việc tích lũy các tệp swp (khi được bật.) Với cùng lý do bạn chỉnh sửa thông qua diff và vá bản gốc chỉ khi lưu rõ ràng, điều đó có ý nghĩa với tôi nếu bạn có thể tạo ra một chuỗi các khác biệt, tạo ra một phần tổng (ngày trước ngày hôm nay -> hàng đêm; đêm + hôm nay = hiện tại), v.v ... Tôi đã tìm thấy ': pre [phục vụ] `trong manuel, tôi nghĩ rằng nó hoạt động theo cách đó. Trong mọi trường hợp, dòng quan trọng nhất là:The original file is no longer needed for recovery.
John P

Có vẻ như nó hoạt động - :preserve:set cpoptions=...&để lại tệp .swp và .swo trong thư mục và đề nghị khôi phục từ một trong hai. Sử dụng vim -r <file>bạn có thể chọn giữa .swp và .swo. Các chỉnh sửa tiếp theo tạo ra .swn, .swm, v.v., dường như là tổng của một phần của các giao dịch hoán đổi cho đến thời điểm đó. Bạn có thể trở lại phiên bản theo ý thích và chỉnh sửa (~ = fork) hoặc lưu (~ = stash). Cuối cùng, bạn có thể tạo ra các tệp hoán đổi, tạo các bản sao lưu của chúng, v.v. Tôi có thể sai về các chi tiết khi nói đến các tệp lớn hơn - tôi cũng không chắc điều đó ảnh hưởng đến các tệp hoán đổi thêm như thế nào - xem bên dưới.
John P

(Tiếp tục) - bộ đệm mang cờ và đó là bộ đệm tạo ra các tệp hoán đổi, vì vậy ngay cả khi các cờ không được đặt từ cấu hình toàn cầu hoặc tự động tải, chúng vẫn được kế thừa trong quá trình khôi phục. Để thay thế chuỗi khôi phục bằng một tệp khôi phục duy nhất, bạn có thể di chuyển hoán đổi bạn muốn .swp và ẩn phần còn lại. Tôi muốn biết thêm về sự chồng chéo giữa phục hồi tệp và quản lý phiên Vim nếu bất kỳ ai cũng có thể điền vào các khoảng trống.
John P


7

1 Mở tệp hoán đổi .file.swptrongvim

2 :recoversẽ khôi phục tập tin của bạn


7

Sau khi đọc các bình luận Vegar Westerlund và Heptite, tôi muốn biết tại thời điểm nào vim cần tệp gốc (hoặc bản sao lưu) để khôi phục từ tệp .swp. Đây là những gì đã làm:

Tôi đã mở tệp 975 dòng, chỉnh sửa nó trên dòng 949 (tạo .swptệp) và giết tiến trình, sau đó xóa bản gốc. $ vim Original_Filehỏi nếu tôi muốn phục hồi từ .swp »> có; chỉ có 68 dòng đầu tiên và 34 dòng cuối cùng (bắt đầu 8 dòng trên bản chỉnh sửa của tôi) mới thực sự được phục hồi.

Sau đó, tôi đã lặp lại thử nghiệm với các tệp nhỏ hơn: Từ 20 đến 200 dòng, tệp .swp chứa 100% nội dung gốc . Nhưng ở 300 dòng, chỉ có 68 dòng đầu tiên và 18 dòng cuối cùng (bắt đầu 2 dòng trên bản chỉnh sửa của tôi) được đưa vào .swp.

Để kết luận, thật tốt khi biết rằng vim luôn lưu "tiêu đề" và "dưới cùng" của tệp trong các tệp .swp. Có lẽ có một cài đặt để kiểm soát .swp nên chứa bao nhiêu dòng?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.