關于文件的保存前面已經說了 :wq、q、:q!,但還有一些保存文件的細節需要知道。
當 vim 打開文件,如果沒有任何修改,:q 可以順利退出,如果有修改,vim 會提示 “已修改單位保存,可用 ! 強制執行”,執行 :q! 放棄所有修改,并且這種情況下 vim 不會再警告提示。
如果 vim 打開文件後,沒有做任何修改,然後輸入 :w 後接着 :q 退出(2次命令),文件有沒有修改呢? 答案是有,文件的屬性被修改了,:w 命令就是寫入文件,文件的時間會修改。
wangbo@wangbo-VirtualBox:~/test/vim$ ls -l 1.txt
-rw-rw-r-- 1 wangbo wangbo 14 12月 17 10:50 1.txt
wangbo@wangbo-VirtualBox:~/test/vim$ vim 1.txt // 不修改内容,輸入 :w 和 :q 後
wangbo@wangbo-VirtualBox:~/test/vim$ ls -l 1.txt
-rw-rw-r-- 1 wangbo wangbo 14 12月 17 10:51 1.txt
同理即便内容不改變 wq 也會寫入文件,為了清楚的演示,給 ls 加上 --full-time 參數,它可以顯示文件的準确時間。
wangbo@wangbo-VirtualBox:~/test/vim$ ls --full-time 1.txt
-rw-rw-r-- 1 wangbo wangbo 14 2020-12-17 10:58:04.489510495 0800 1.txt
wangbo@wangbo-VirtualBox:~/test/vim$ vim 1.txt // 使用 :wq 退出
wangbo@wangbo-VirtualBox:~/test/vim$ ls --full-time 1.txt
-rw-rw-r-- 1 wangbo wangbo 14 2020-12-17 10:59:32.386770991 0800 1.txt
wangbo@wangbo-VirtualBox:~/test/vim$ vim 1.txt // 使用 :wq 退出
wangbo@wangbo-VirtualBox:~/test/vim$ ls --full-time 1.txt
-rw-rw-r-- 1 wangbo wangbo 14 2020-12-17 10:59:42.105943076 0800 1.txt
幹嘛糾結這個? 改變文件時間有那麼重要麼? 有! 有些場合真的很重要,舉 2 個例子:
第一: 在文件同步操作中,可能會先比較文件的屬性,以此來判斷文件是否被修改而不依賴于文件的内容,如果大量的文件時間被修改,但是内容沒有變,這樣的同步可能顯示效率低下無意義,浪費帶寬和時間;
第二: 更常見的是在程序編譯中,由于文件的時間被修改了,系統需要重新把這些文件編譯,對于特别的大的工程,一個文件的修改會導緻依賴文件都要重新編譯,這會導緻程序編譯時間邊長,浪費資源和時間。
因此我們希望當文件内容沒有修改的時候,不要強制寫入文件,有修改的時候才寫入,vim 提供的 :x (exit) 就能符合這種要求,所以 :x 是更好的保存退出 vim 的方式。
如果希望把文件另存為可以使用 :w 3.txt 或 :wq 3.txt 的方式,使用 :w 還可以選擇要保存的行到另外的文件,:2,10 w 2-10.txt 表示把第2行到10行保存到文件 2-10.txt 中,: 後跟數字在 vim 裡一般表示行數,比如輸入 :2 會讓當前光标跳轉到第 2 行,在以後的章節還會詳細講解。
你可能會看到 :qa!,它用于多窗口的時候退出所有的緩沖區并且放棄修改,目前還沒有講到 vim 的多窗口模式,暫且了解。
如果在編輯過程中,想放棄上次 :w 之後的修改,可以使用 :e! 命令丢棄修改,如果打開文件後沒有執行過 :w,那 :e! 相當于恢複到打開文件的初始狀态。
執行 :e! 後,最近的修改 wronge somthing 将被丢棄,繼續 :q 退出 vim,就像文件從未被打開過一樣。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!