2011-08-30 25 views
6

Tôi có Emacs mở nhưng vô tình tôi đã xóa các tập tin .emacs nó đọc khi nó bắt đầu. Điều này đại diện cho khoảng 15 năm tinh chỉnh. (Tôi biết, tôi biết, bản sao lưu.)Làm thế nào để viết .emacs từ Emacs khi tôi đã xóa .emacs

Có cách nào để Emacs ghi ra tệp .emacs mà tôi đã xóa không?

Tôi thường không hỏi một câu hỏi lame như vậy trên SO nhưng tôi biết tôi chỉ có một ngày hoặc lâu hơn trước khi phiên Emacs này kết thúc.

+0

Vì vậy, bạn có bộ đệm mở bằng .emac không? – ayckoster

+0

Heh, no, tôi không * mà * lame. – SteveRawlinson

+0

Câu trả lời của Zev là đặt cược tốt nhất của bạn, có vẻ như bạn là SOL. –

Trả lời

5

Như ayckoster gợi ý, bạn có thể thử khôi phục tệp hoặc công cụ pháp y như The Sleuth Kit. Hoặc, và điều này có vẻ điên rồ, nếu bạn đang sử dụng hệ thống giống Unix, bạn có thể tìm kiếm thông qua thiết bị đĩa thô (trên máy Mac mà tôi hiện đang sử dụng, đó là/dev/rdisk1). Nghiêm túc, nhiều lần tôi đã quá lười biếng để phá vỡ một công cụ phục hồi hoàn toàn nhưng thay vì sử dụng một cái gì đó như sudo less -f /dev/rdisk1, tìm kiếm một chuỗi tôi biết là trong tập tin (global-set-key, bất cứ ai?), Và đã thành công trong việc khôi phục tập tin gốc Nội dung.

+1

Tôi đã chấp nhận câu trả lời này bởi vì nó là một trong đó thực sự đã cho tôi tập tin của tôi trở lại (grepping thông qua/dev/disk0). Cảm ơn nhiều. – SteveRawlinson

+0

@ajk: +1 cho câu trả lời của bạn cho "chìa khóa toàn cầu", làm tôi cười cho các .emac của tôi thực sự là đầy đủ; Nhưng điều đó nói rằng, tôi đã có bản sao của .emacs của tôi trong một số tài khoản người dùng, trên một số máy tính, trong Mercurial, trong tài khoản Gmail của tôi, trên DropBox, v.v. Ý tôi là, OP là đồng bằng ốm vì không bao giờ có sao lưu tập tin đó. Bệnh đồng bằng. – SyntaxT3rr0r

5

Nếu bạn bật tính năng sao lưu của Emacs, bạn nên có một bản sao của tệp .emacs tiếp theo của bạn trong ~/.emacs ~. Nếu vậy, chỉ cần đổi tên một thành ".emacs" và bạn sẽ có tệp .emacs với tất cả trừ những thay đổi mới nhất của bạn. Ngay cả khi bạn hiện chưa bật sao lưu, bạn vẫn có thể có một tệp đáng kể của tệp .emacs trong tệp sao lưu cuối cùng trên tệp. Bạn cũng nên xem xét giá trị của biến "backup-directory-alist" - nó chỉ định (các) vị trí cho các tệp sao lưu được lưu trữ nếu mặc định (cùng thư mục với tệp đã sửa đổi) không được sử dụng.

Nếu không, làm thế nào tốt là bộ nhớ của bạn ... ;-)

EDIT: Kể từ khi bạn không có một bản sao lưu của tập tin emacs của bạn nhưng bạn có một trường hợp chạy Emacs đã được bắt đầu với điều đó emacs tập tin, một điều bạn có thể làm là để lưu tất cả các thiết lập tùy chỉnh mà có thể đã được xác định trong tập tin .emacs của bạn. Để làm điều này, hãy làm một cái gì đó như:

(setq custom-file "/my/home/directory/.emacs-custom.el") 
(custom-save-all) 

Sau đó, bạn có thể tạo một tập tin emacs mới và thêm các dòng sau vào nó:

(setq custom-file "/my/home/directory/.emacs-custom.el") 
(load custom-file) 

Đó ít nhất sẽ khôi phục lại một số các biến tùy chỉnh cài đặt trong tệp .emacs của bạn.

+0

Thật không may tôi không bao giờ chỉnh sửa .emacs trong Emacs. Cảm ơn bạn đã thử. – SteveRawlinson

+4

Bạn không bao giờ chỉnh sửa .emacs trong Emacs? Làm thế nào để bạn chỉnh sửa nó? – zev

+1

Ok, tôi đã chỉnh sửa câu trả lời của mình bằng một đề xuất khác bằng cách sử dụng "tùy chỉnh-lưu-tất cả". – zev

1

Emacs đánh giá tệp .emacs của bạn và sau đó nó bị đóng. Vì vậy, về cơ bản bạn không thể nhận được .emacs của bạn trở lại.

Giải pháp có thể là sử dụng ứng dụng khôi phục tệp. Tỷ lệ cược của bạn .emacs trên ổ cứng của bạn khá tốt.

Vì hầu hết các chương trình như vậy không thể suy ra tên tệp hoặc tên thư mục của tệp đã xóa mà bạn phải biết nội dung của các tệp .emac của mình.

Sau đó, bạn có thể khôi phục tất cả các tệp hiện đang bị xóa trong một số thư mục và tìm kiếm đệ quy nội dung của các tệp .emac của bạn.

Quá trình này có thể mất nhiều thời gian. Bạn phải quyết định xem nó có xứng đáng với nỗ lực của bạn hay không.

1

Tôi không biết cách nào để Emacs cung cấp tệp .emac gốc, nhưng bạn chắc chắn có thể thẩm vấn hàm được nạp và các ký hiệu biến, và nhận giá trị của chúng. Điều này sẽ được khá nhiều công việc, nhưng tôi nghĩ về lý thuyết bạn sẽ có thể có được một đoạn tốt của dữ liệu này trong một số hình thức hoặc khác, nếu bạn đã thành công trong việc lọc tất cả xuống những gì bạn biết là của bạn .

Đối với các hàm được đánh giá, (symbol-function 'SYMBOL) sẽ trả về định nghĩa (ít có thể đọc) của hàm được cung cấp. Sau đó, bạn có thể sử dụng (fset 'SYMBOL VALUE), trong đó VALUE là kết quả của cuộc gọi đến symbol-function, để xác định hàm đó trong tệp .emac mới. Điều đó sẽ cung cấp cho bạn một cách tiếp cận để phục hồi các chức năng được xác định của bạn.

Bạn cũng có thể xem xét: How to print all the defined variables in emacs?

Đây là một rất không đầy đủ khởi động, nhưng với hạn chế thời gian tôi gửi bài và đánh dấu nó cộng đồng wiki, nếu có ai muốn chạy với nó.

Cách đặt trạng thái của ứng dụng theo cách đáng tin cậy sẽ là một khởi đầu tuyệt vời, nếu phiên hiện tại chắc chắn sẽ bị giết (hoặc thậm chí nếu không thực sự bảo vệ chống lại sự cố hoặc các rủi ro khác).

Bạn có khả năng gắn thẻ lại thẻ này với một số thẻ loại khôi phục dữ liệu chung hơn để mở rộng đối tượng.

Các vấn đề liên quan