iT邦幫忙

0

請問linux的vi文書處理器如何復原原始文字內容

因為編輯時錯刪字串,若要回頭查哪裡改錯時間花費會比較於,重新載入原檔
但我google後只查到":e!"這個指令,但執行後沒有復原;所以想請問,哪個指令能
夠重新復原會原始的文字檔案,謝謝

看更多先前的討論...收起先前的討論...
我只會
:q!
就是 quit without saving
這次的所有編輯都不算數
重新做人就是了
下雨

註:相反指令是 :wq write/save and quit
編輯任何檔案前,記得先cp.
cp xxx.conf xxx.conf.bak
有cp, 免煩惱.
修改設定檔,請愛用nano.
好習慣
給你一個讚
wordsmith iT邦高手 1 級 ‧ 2015-10-06 09:47:53 檢舉
如果常有這種問題,應該是用版本控管來做比較好,git 好用哦
genbo iT邦新手 5 級 ‧ 2015-10-07 18:37:10 檢舉
一次又多接觸了,cp,nano,git三個新詞,對於只摸過windows的我來說,只能蛤?這是啥?哭
Ruei iT邦研究生 1 級 ‧ 2015-10-20 12:25:46 檢舉
前兩個比較快可以了解,git 就要看習慣了 xd
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
Ray
iT邦大神 1 級 ‧ 2015-10-05 23:41:48
最佳解答

指令沒有錯, 但是你有先回到 vi 的 command mode 再下這個指令嗎?

vi 操作時有兩種 mode: insert mode 和 command mode, 你在裡面如果可以打字r就是 insert mode, 但上面的指令不能在 insert mode 執行, 你必須先按 <ESC> 鍵離開 insert mode, 回到 command mode 之後, 才可以下 :e! 指令.

此外, 如果編輯途中, 曾經按過 <ESC>:w 的話, 那內容已經回寫到檔案裡面去了, 你再用 :e! 也只能載回最後一次存檔的內容, 不會是原始開擋的內容.

看更多先前的回應...收起先前的回應...
genbo iT邦新手 5 級 ‧ 2015-10-06 00:30:39 檢舉

你好,請問若檔案已改得很亂,想回到該檔案原始的內文,就是用:e!(指令列模式)來使它復原嗎?

genbo iT邦新手 5 級 ‧ 2015-10-06 01:05:02 檢舉

請教我輸入:e!之後出現這畫面,該如何下一步呢?

genbo iT邦新手 5 級 ‧ 2015-10-06 01:06:45 檢舉

Ray iT邦大神 1 級 ‧ 2015-10-06 07:54:24 檢舉

上面這張畫面, 代表你多開了一個 vi, 也就是有兩個 vi 想要同時編輯同一個檔案.

你是否沒有正常結束掉前一個 vi, 然後又執行了第二個 vi, 去編輯同一個檔案? 你可以試著刪掉上面那個 ~/.aMule/.amule.conf.swp 檔案之後, 再重新進入 vi.

genbo iT邦新手 5 級 ‧ 2015-10-06 23:59:21 檢舉

raytracy你好,
請問如圖說明":e!"的用法
是只恢復"當下"修改前的狀態,還是直接回到最原始的檔案?

Ray iT邦大神 1 級 ‧ 2015-10-07 05:04:00 檢舉

genbo提到:
是只恢復"當下"修改前的狀態,還是直接回到最原始的檔案?

你要先定義清楚甚麼叫「最原始的檔案」?

假設你的動作是這樣:
vi 原始檔案 > 修改1... > 存檔1 > 修改2... > 存檔2 > 修改3... > 存檔3 > 修改4....

然後你在這個時候按下 :e! 的話, 他只能讓你回到存檔 3 那時候的狀態, 不可能讓你回到最前面那個 vi 剛開始的狀態. 因為你中間的「存檔」動作, 已經將他覆蓋掉而且寫進磁碟了, 在磁碟上被蓋掉的東西, vi 沒有辦法可以恢復到以前的狀態. (應該說一般軟體都沒有辦法這樣做)

所以, 重點是你中間有沒有做過存檔的動作? 若有的話, 那就是只能回到最後一次存檔的內容.

Ray iT邦大神 1 級 ‧ 2015-10-07 05:10:12 檢舉

genbo提到:
但執行後沒有復原

你前面提到這個現象, 我認為應該不是沒有恢復, 而是你在編輯中途曾經按過存檔指令, 使得 disk 檔案已經被寫入覆蓋成最新的內容, 所以 :e! 也只能撈回這個內容, 跟你螢幕上的相同, 所以你以為沒有復原.

其實是已經復原成 disk 的內容了, 只是那個內容已經被覆蓋成跟你現在螢幕上的相同罷了.

我要發表回答

立即登入回答