学习vi和vim编辑器(1):vi文本编辑器
UNIX系統中有非常多編輯器。能夠分為兩種類型:行編輯器和全屏編輯器。行編輯器每次僅僅能在屏幕中顯示文件的一行,如ed和ex編輯器。全屏編輯器能夠在屏幕上顯示文件的一部分。
vi(讀為vee-eye)編輯器是UNIX_Like操作系統的標準文本編輯器。
vi是 visual editor的縮寫,vi編輯器屬于全屏編輯器。能夠在閱讀文件時當場就改動。而且立馬看到改動后的結果。
對于新手而言,vi編輯器難度還是很大的,可是一旦熟悉了vi編輯器,可能就再也不想又一次使用其它“簡單”的編輯器了。學習vi編輯器時,要學著把編輯工作交給計算機。由于這本來就是計算機的工作。
vi編輯器有兩種模式:命令模式和插入模式。在命令模式中,所輸入的一切都會被vi編輯器解釋為輸入的命令。
而在插入模式中。所輸入的一切都會被當做輸入的文本插入到正在編輯的文件。在vi編輯器中。命令有例如以下特點:
?* 命令是大寫和小寫敏感的,也就是區分大小;
?* 輸入命令時。命令不會顯示在屏幕上;
?* 輸入完命令后不須要增加enter鍵。
同一時候有一組命令會顯示在屏幕的底端,在這些命令前有特殊的符號。比如冒號(:)用于開始全部的ex命令。vi編輯器使用的底層編輯器就是ex行編輯器。vi僅僅是其可視化的模式。因此能夠在vi編輯器中使用ex編輯器的命令。
既然是文本編輯器,那么首先須要學習的就是怎樣打開與關閉文件。能夠使用vi編輯器來編輯不論什么文本。須要說明的是,vi將須要編輯的文件內容拷貝到內存中的緩沖區中,因此我們改動的僅僅是內存中文件的副本,僅僅有將緩沖區里的文件內容進行存儲,才干將對文件的編輯結果更新到磁盤中的文件里。
存儲緩沖區的文件內容就是我們通常所說的“寫入文件”或者說“保存文件”。
打開文件: vi [filename]
?假設沒有指定filename。那么vi將打開一個未命名的緩沖區。當我們將緩沖區里的內容寫入到文件時,此時須要指定filename。
假設filename當前已經存在,則是編輯一個已存在的文件,假設filename不存在,則相當于創建一個新的文件(須要將創建的緩沖區保存才會真的產生一個名為filename的文件)。當打開一個新的文件時。vi編輯器的底部狀態欄會有對應消息。如圖所看到的:
打開文件時遇到的問題:
* 你覺得應該是編輯一個現有文件,可是vi編輯器卻顯示 "[New File]"。這個問題能夠肯定的說是你輸入的文件名稱出錯了。
* 出現例如以下圖所看到的的[readonly],"Permission denied"等消息。這是由于你對該文件沒有寫權限或者使用了vi編輯器的查看模式(vi -R)
* 輸入 :q 命令離開時。卻出現例如以下警告:
這是由于你改動了文件(非常可能你自己都不知道改動了哪里)。由于此時文件已經發生了變動,vi編輯器一定會讓你選擇是否保存編輯結果才干離開。因此此時能夠使用 ZZ命令保存改動結果然后退出,或者使用 :q! 不保存編輯結果然后離開。
保存與離開文件:
ZZ命令: 保存編輯結果,離開vi編輯器。還能夠使用ex命令來保存編輯結果, :w 命令僅僅保存(寫入)編輯結果,不離開編輯器。 :wq 命令保存編輯結果離開vi編輯器(:wq 與 ZZ 命令同樣)
結束而不保存編輯結果:
?:e! 命令:該命令能夠消除全部的編輯結果,直接回到近期一次存儲時的文件內容,也就是說能夠“從頭再來”。 :q! 命令也是直接忽略當前的編輯結果,回到上一次存儲時的文件內容,同一時候離開vi編輯器。
為什么這兩個命令后面都有感嘆號呢。由于 :e 和 ?:q 命令都會讓當前的編輯效果消失,而vi編輯器一般不會讓你放棄編輯結果。因此加上感嘆號后。就能夠使vi不理會這個禁令,直接將當前的編輯結果放棄。回到近期一次存儲時的文件內容。
保存文件時發生的問題:
* 寫了半天。發現沒有寫權限。 能夠使用 ?:w filename 將當前結果寫入到一個新的文件(因為此時會在文件夾中新創建一個文件,因此須要將該文件寫入到一個對你而言具有寫權限的文件夾下)
* 嘗試寫文件,卻發現文件系統已滿。
這個解決方法由非常多。一方面能夠將該文件寫入到具有剩余空間的文件系統,還有一面能夠直接輸入: !sh 回到shell環境中刪除當前文件系統的一些大文件。在ex命令中能夠用感嘆號后面接UNIX命令。直接運行對應的UNIX命令。例如以下圖所看到的,輸入 :!pwd 顯示當前文件夾:
輸入命令之后就會臨時退出vi編輯器,顯示出命令運行的結果:
此時按下enter鍵后就能又一次回到vi編輯器了。
本章vi編輯器命令總結:
ZZ,:w, :q, :wq, :q!。 :e! 。?
總結
以上是生活随笔為你收集整理的学习vi和vim编辑器(1):vi文本编辑器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于copy_from_user函数
- 下一篇: ZSH and oh-my-zsh 强强