2011-08-30 78 views
6

我有Emacs打開,但不小心,我刪除了它在啓動時讀取的.emacs文件。這代表了大約15年的調整。 (我知道,我知道備份)。如何從Emacs中寫入.emacs當我刪除.emacs

有沒有辦法讓Emacs寫出我已經刪除的.emacs文件?

我通常不會問這樣一個蹩腳的問題,但我知道在Emacs會話結束前我只有一天左右的時間。

+0

那麼你有緩衝打開.emacs? – ayckoster

+0

嘿,不,我不是*跛腳。 – SteveRawlinson

+0

Zev的回答是你最好的選擇,聽起來像你是SOL。 –

回答

5

正如ayckoster所建議的,您可以嘗試使用文件恢復或取證工具,如The Sleuth Kit。或者,這可能看起來很瘋狂,如果你使用的是類Unix系統,你可以通過原始磁盤設備進行搜索(在我目前使用的Mac上,這將是/ dev/rdisk1)。說真的,有幾次我一直懶得打破一個完整的恢復工具,而是使用類似sudo less -f /dev/rdisk1的東西,搜索一個字符串,我知道是在文件(global-set-key,任何人?),併成功恢復文件的原始內容。

+1

我已經接受了這個答案,因爲它實際上讓我回到了我的文件(grep through/dev/disk0)。非常感謝。 – SteveRawlinson

+0

@ajk:+1爲您的答案爲「全球定位鑰匙」,讓我爲我的.emacs笑聲確實充滿了這一點; )但是這說,我在幾個用戶帳戶,幾臺計算機,Mercurial,我的GMail帳戶,DropBox等等上都有我的.emacs的副本。我的​​意思是,OP是普通的病態,因爲從來沒有備份過該文件。平原病。 – SyntaxT3rr0r

5

如果您打開了Emacs的備份功能,您應該在〜/ .emacs〜中有倒數第二個.emacs文件的副本。如果是這樣,只需將其重命名爲「.emacs」,您將擁有除最新更改外的所有.emacs文件。即使您目前沒有啓用備份,您仍可能在上次備份文件中包含大量的.emacs文件。您還應該查看變量「backup-directory-alist」的值 - 指定不使用默認(與修改文件相同的目錄)的備份文件要存儲的位置。

否則,多麼好你的記憶... ;-)

編輯:既然你沒有你的.emacs文件的備份,但你有啓動與運行的Emacs實例的.emacs文件,您可以做的另一件事是保存您的.emacs文件中定義的所有自定義設置。要做到這一點,這樣做:

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

然後,你可以創建一個新的.emacs文件,並添加以下行吧:

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

至少會恢復一些自定義變量您的.emacs文件中的設置。

+0

不幸的是,我從不在Emacs中編輯.emacs。感謝您的嘗試。 – SteveRawlinson

+4

您從不在Emacs中編輯.emacs?你如何編輯它? – zev

+1

好吧,我已經使用「custom-save-all」的另一個建議編輯了我的答案。 – zev

1

Emacs評估您的.emacs文件,然後關閉。所以基本上你不能得到你的.emacs。

解決方案可能是使用文件恢復應用程序。您硬盤驅動器上的.emacs的可能性相當不錯。

由於大多數此類程序無法推斷被刪除文件的文件名或目錄名,所以您必須知道.emacs的內容。

然後,您可以恢復某些文件夾中當前刪除的所有文件,並遞歸搜索.emacs的內容。

此過程可能需要很長時間。你必須決定它是否值得你付出努力。

1

我不知道有什麼方法可以讓Emacs提供原始的.emacs文件,但是您可以查詢加載的函數和變量符號,並獲取它們的值。

這將會是相當多的工作,但我認爲在理論上你應該能夠以某種形式或其他方式獲得大量的這些數據,如果你成功地將它過濾到你知道的是你的。

對於評估函數,(symbol-function 'SYMBOL)將返回一個(較少可讀的)提供函數的定義。然後,您可以使用(fset 'SYMBOL VALUE)(其中VALUE是調用symbol-function的結果)在新的.emacs文件中定義該函數。這會給你一個恢復你定義的函數的方法。

你也可以看看: How to print all the defined variables in emacs?

這是一個非常不全首發,但由於時間的限制我張貼並將其標記社區維基,如果有人想與它一起運行。

如果當前會話肯定會被殺死(或者甚至實際上不是防止崩潰或者防止崩潰),那麼如何以可靠可靠的方式傾倒應用程序狀態將是一個很好的開始。其他不幸事件)。

您可以使用一些更通用的數據恢復類型標記重新標記此標記以擴展觀衆。