vi與vim
- vi編輯器是所有Unix及Linux系統(tǒng)下標準的編輯器,他就相當于windows系統(tǒng)中的記事本一樣,它的強大不遜色于任何最新的文本編輯器。他是我們使用Linux系統(tǒng)不能缺少的工具。由于對Unix及Linux系統(tǒng)的任何版本,vi編輯器是完全相同的,學(xué)會它后,您將在Linux的世界里暢行無阻。
- vim 具有程序編輯的能力,可以以字體顏色辨別語法的正確性,方便程序設(shè)計;
因為程序簡單,編輯速度相當快速。 - vim可以當作vi的升級版本,他可以用多種顏色的方式來顯示一些特殊的信息。
- vim會依據(jù)文件擴展名或者是文件內(nèi)的開頭信息, 判斷該文件的內(nèi)容而自動的執(zhí)行該程序的語法判斷式,再以顏色來顯示程序代碼與一般信息。
- vim里面加入了很多額外的功能,例如支持正則表達式的搜索、多文件編輯、塊復(fù)制等等。 這對于我們在Linux上進行一些配置文件的修改工作時是很棒的功能。
為何要學(xué) vi
所有的Unix Like系統(tǒng)都會內(nèi)建vi文本編輯器,其他的文本編輯器則不一定會存在;
一些軟件的編輯接口會主動調(diào)用vi (例如 crontab, visudo, edquota 等命令);
-
vi的使用
基本上vi可以分為三種狀態(tài),分別是一般模式、編輯模式和命令行模式,各模式的功能區(qū)分如下:-
一般模式:
以vi打開一個文件就直接進入一般模式了(這是默認的模式)。在這個模式中, 你可以使用上下左右 按鍵來移動光標, 你可以使用刪除字符或刪除整行來處理文件內(nèi)容, 也可以使用復(fù)制、粘貼來處 理你的文件數(shù)據(jù)。 -
編輯模式:
在一般模式中可以進行刪除、復(fù)制、粘貼等的操作,但是卻無法編輯文件的內(nèi)容,只有當?shù)侥惆聪?【i, I, o, O, a, A, r, R】等任何一個字母之后才會進入編輯模式。這時候屏幕的左下方會出現(xiàn) 【INSERT或 REPLACE】的字樣,此時才可以進行編輯。而如果要回到一般模式時, 則必須要按下 【Esc】 即可退出編輯模式。 -
命令行模式:
輸入【 : / ? 】三個中的任何一個,就可以將光標移動到最底下那一行。在這個模式中, 可以提供 查找、讀取、存盤、替換字符、離開vi、顯示行號等的動作則是在此模式中完成的!
-
一般模式可用的按鈕說明
移動光標:
【h、j、k、l】,分別控制光標左、下、上、右移一格
【ctrl+b】屏幕往"后"移動一頁
【ctrl+f】屏幕往"前"移動一頁
【n<space>】光標向右移動n個字符
【Home】移動到這一行的最前面字符處:0數(shù)字,但不能用數(shù)字小鍵盤上的數(shù)字
【End】 移動到這一行的最后面字符處:$,我測試好像不行
【w】光標跳到下個字的開頭
【e】光標跳到下個字的字尾
【H】 光標移動到這個屏幕的最上方那一行的第一個字符
【M】 光標移動到這個屏幕的中間那一行的第一個字符
【L】光標移動到這個屏幕的最下方那一行的第一個字符
【G】 移動到這個文件的最后一行
【nG】移動到這個文件的第n行(可配合:set nu)
【gg】 移動到這個文件的第一行,相當于1G
【n<Enter>】光標向下移動n行
查找與替換:
【/word】 向光標向下尋找一個名稱為word的字符串
【?word】 向光標向上尋找一個名稱為word的字符串
【n】 代表重復(fù)前一個查找的動作
【N】 與n剛好相反,為【反向】進行行前一個查找動作
【:n1,n2s/word1/word2/g】 n1與n2為數(shù)字,在第n1與n2行之間查找word1 這個字符串,
并將該字符串替換為word2
【:1,$s/word1/word2/g】 從第一行到最后一行查找word1字符串,并將該字符串替換為word2
【:1,$s/word1/word2/gc】 從第一行到最后一行查找word1字符串,并將該字符串替換為
word2 , 且在替換前提示用戶確認是否進行替換
刪除、復(fù)制與粘貼:
【x】 為向后刪除一個字符 (相當于【del】鍵)
【X】 為向前刪除一個字符(相當于【backspace】鍵)
【nx】 連續(xù)向后刪除n個字符
【dd】 刪除光標所在行
【ndd】 刪除光標所在的向下n行
【d1G】 刪除光標所在行到第一行的所有數(shù)據(jù)
【dG】 刪除光標所在到最后一行的所有數(shù)據(jù)
【d$】 刪除光標所在處,到該行的最后一個字符
【d0】 刪除光標所在處,到該行的最前一個字符
【yy】 復(fù)制光標所在的那一行
【nyy】 復(fù)制光標所在的向下n列
【y1G】 復(fù)制光標所在行到第一行的所有數(shù)據(jù)
【yG】 復(fù)制光標所在行到最后一行的所有數(shù)據(jù)
【y0】 復(fù)制光標所在的那個字符到該行行首的所有數(shù)據(jù)
【y$】 復(fù)制光標所在的那個字符到該行行尾的所有數(shù)據(jù)
【p】將已復(fù)制的數(shù)據(jù)在光標下一行粘貼上
【P】 則為貼在光標的上一行
【u】 恢復(fù)前一個操作
【Ctrl+r】重做上一個操作
【.】 是重復(fù)前一個操作
一般模式切換到編輯模式的可用的按鈕說明:
【i, I】 進入編輯模式:
i 為【從目前光標所在處插入】
I 為【在目前所在行的第一個非空格符處開始插入】
【a, A】 進入編輯模式(Insert mode):
a 為【從目前光標所在的下一個字符處開始插入】
A 為【從光標所在行的最后一個字符處開始插入】
【o, O】 進入編輯模式:
o 為【在目前光標所在的下一行處插入新的一行】
O 為在目前光標所在處的上一行插入新的一行
【r, R】 進入取代模式:
r 只會取代光標所在的那一個字符一次
R會一直取代光標所在的文字,直到按下 ESC 為止;
【Esc】 退出編輯模式,回到一般模式
一般模式切換到命令行模式可用的按鈕說明
【:w】 保存編輯的內(nèi)容
【:w!】強制寫入該文件,但跟你對該文件的權(quán)限有關(guān)
【:q】 離開vi
【:q!】 不想保存修改強制離開
【:wq】 保存后離開
【:x】 保存后離開
【ZZ】 若文件沒有更動,則不保存離開,若文件已經(jīng)被更改過,則保存后離開
【:w filename】 將編輯的數(shù)據(jù)保存成另一個文件(類似另存)
【:r filename】 在編輯的數(shù)據(jù)中,讀入另一個文件的數(shù)據(jù)。即將
【filename】 這個文件的內(nèi)容加到光標所在行后面。
【:n1,n2 w filename】 將n1到n2的內(nèi)容保存成filename這個文件。
【:! command】暫時離開vi 到命令行模式下執(zhí)行command的顯示結(jié)果!
例如 【:! ls /home】即可在 vi 當中察看/home底下以ls輸出的文件信息!
【:set nu】 顯示行號
【:set nonu】 與 set nu 相反,為取消行
vim的緩存文件、恢復(fù)與開啟時的警告信息
- 我們知道一些常用的編輯軟件,都有個恢復(fù)的功能,就是說當你的系統(tǒng)因為某些原因而導(dǎo)致類似當機的情況時,還可以利用這個恢復(fù)功能將之前未保存的數(shù)據(jù)找回來。我們的VIM也有這個功能。
- 當我們在使用vim編輯時,vim會在與被編輯的文件的目錄下,再建立一個名為 .filename.swp的文件。如果你的系統(tǒng)因為某些原因斷線了, 導(dǎo)致你編輯的文件還沒有保存,這個時候 .filenam.swp 就能夠發(fā)會救援的功能了。
我們來演示一下
vim man.config
ctrl+z放到后臺執(zhí)行
我們停止VI的進程
一種方法
ps aux |grep vi
kill -9 n
另外一種方法
jobs
kill -9 %1
我們用ls -l 命令來查看一下目錄里面,會發(fā)現(xiàn)有個.man.config.swp的文件,這個文件就是個緩存的文件
我們再來編輯
vim man.config
這時候會出現(xiàn)一些信息
- 問題一:可能有其他人或程序同時在編輯這個文件:
- 問題二:在前一個vim的環(huán)境中,可能因為某些不知名原因?qū)е聉im中斷 (crashed):
右下角會出現(xiàn)六個命令項,其作用說明如下:
(O)pen Read-Only:打開此文件成為只讀檔, 可以用在你只是想要查閱該文件內(nèi)容并不想要進行編輯行為時。
一般來說,在上課時,如果你是登入到同學(xué)的計算機去看他的配置文件, 結(jié)果發(fā)現(xiàn)其實
同學(xué)他自己也在編輯時,可以使用這個模式;
(E)dit anyway:還是用正常的方式打開你要編輯的那個文件, 并不會載入暫存盤的內(nèi)容。如果說兩個人都在
編輯這個文件的話,很容易出現(xiàn)互相改變對方的文件等問題。
(R)ecover:就是加載暫存盤的內(nèi)容,用在你要救回之前未保存的工作。 不過當你救回來并且儲存離開vim后,
還是要手動自行刪除那個暫存檔。
(D)elete it:你確定那個暫存檔是無用的!那么開啟文件前會先將這個暫存盤刪除
(Q)uit:按下 q 就離開vim,不會進行任何動作回到命令提示字符。
(A)bort:忽略這個編輯行為,感覺上與 quit 非常類似!
vim的功能
其實,目前大部分的Linux發(fā)行版本都以vim取代了vi。為什么要用vim呢?因為vim具有顏色顯示的功能,并且還支持許多的程序語法(syntax)和相應(yīng)的提示信息。查看自己的VI是不是被VIM代替,可以用alias這個命令來查看是不是有alias vi=’vim’這一行。
塊選擇
【v】字符選擇,會將光標經(jīng)過的地方反白選擇
【V】 行選擇,會將光標經(jīng)過的行反白選擇
【Ctrl+v】 塊選擇,可以用長方形的方式選擇資料 (提制豎列)
【y】 將反白的地方復(fù)制
【d】 將反白的地方刪除
-
多文件編輯
大家在使用vim的時候,可能會碰到你需要復(fù)制一個文件中的某段到另外一個文件中,而vim不能夠在關(guān)閉的時候,把這段保留住?;蛘呤怯闷渌姆椒◤?fù)制。【vim file1 file2】 【:n】編輯下一個文件 【:N】編輯上一個文件 【:files】列出目前這個vim編輯的所有文件 -
多窗口功能
有兩個需要對照著看的文件【:sp filename】開啟一個新窗口,如果有加 filename, 表示在新窗口開啟一個新文件,否則表示兩 個窗口為同一個文件內(nèi)容(同步顯示)。 【ctrl+w+j】 【ctrl+w+↓】按鍵的按法是:先按下 【ctrl】 不放, 再按下 w 后放開所有的按鍵,然后再按下 j ( 或向下箭頭鍵),則光標可移動到下方的窗口。 【ctrl+w+k】 【ctrl+w+↑】同上,不過光標移動到上面的窗口。
vim 環(huán)境設(shè)定與記錄(~/.vimrc, ~/.viminfo)
如果我們以vim軟件來查找一個文件內(nèi)部的某個字符串時,這個字符串會被反白, 而下次我們再次以vim編輯這個文件時,該查找的字符串反白情況還是存在。另外,當我們重復(fù)編輯同一個文件時,當?shù)诙芜M入該文件時, 光標竟然就在上次離開的那一行的開頭。這個功能可能是方便,但也有不方便的時候。怎么會這樣呢?這是因為我們的vim會主動的將你曾經(jīng)做過的行為登錄下來,那個記錄動作的文件就是: /.viminfo,不想用這個功能,就直接刪除/.viminfo。只要你曾經(jīng)使用過vim,那么你的家目錄就會有這個文件。這個文件是自動產(chǎn)生的,你在vim里頭所做過的動作,就可以在這個文件內(nèi)部找到。有興趣的朋友可以自己查看文件里面的內(nèi)容。
不過,對于每個不同的發(fā)行版本對vim的預(yù)設(shè)環(huán)境都不太相同。舉例來說,某些版本在查找到關(guān)鍵詞時并不會高亮度反白, 有些版本則會主動的幫你進行縮排(所謂的縮排,就是當你按下 Enter 編輯新的一行時,光標不會在行首,而是在與上一行的第一個非空格符處對齊)的行為。其實這些都可以自行設(shè)定的,下面我們就來看看vim的環(huán)境設(shè)定。
-
vim的環(huán)境設(shè)定參數(shù)有很多,如果你想要知道目前的設(shè)定值,可以在一般模式時輸入【 :set all】來查閱,由于設(shè)定項目實在太多了,我們在這里就僅列出一些平時比較常用的一些簡單的設(shè)定值,給大家提供參考。
:set all "顯示目前所有的環(huán)境參數(shù)設(shè)定值 :set hlsearch "高亮度反白(高亮度搜尋) :set nohlsearch "取消高亮度反白(高亮度搜尋) :set backspace=2 "在編輯的時候可隨時用退格鍵刪除 (0、1的時候,只針對剛輸入的字符有效) :set autoindent "自動縮排 :set noautoindent "取消自動縮排 :set ruler "可顯示最后一行的狀態(tài) :set showmode "左下角那一行的狀態(tài) :set nu "顯示行號 :set nonu "取消行號 :set bg=dark "顯示不同的底色色調(diào) :syntax on "進行語法檢驗,顏色顯示 :syntax off "關(guān)閉語法檢驗 -
了解完上面的內(nèi)容后,下面我們就能寫一下自己的vim操作環(huán)境。
整體vim的設(shè)定值一般是置在/etc/vimrc這個文件里面,不建議大家來修改他。我們在自己的家目錄里面建立個.vimrc文件,在這里面寫入自己的內(nèi)容就能實現(xiàn)了。
[root@yufei ~]# vim ~/.vimrc
內(nèi)容如下set hlsearch "高亮度反白 set backspace=2 "可隨時用退格鍵刪除 set autoindent "自動縮排 set ruler "可顯示最后一行的狀態(tài) set showmode "左下角那一行的狀態(tài) set nu "可以在每一行的最前面顯示行號 set bg=dark "顯示不同的底色色調(diào) syntax on "進行語法檢驗,顏色顯示 "這個文件的雙引號 (")表示的是注釋 -
保存退出vim后,在下次使用vim的時候,就會有自己的vim操作環(huán)境了。
提醒一點,這個文件中每一行前面加不加【:】效果都是一樣的。
最后,給也幾張不錯的圖,幫助大家更快的來掌握vi/vim,記住一點,不要死記,重在操作


結(jié)束語
如果您對這篇文章有什么意見或者建議,請評論與我討論.
如果您覺得還不錯的話~可以點個喜歡鼓勵我哦.
如果您想和我一起學(xué)習,請毫不吝嗇的私信我吧~