vi編輯器的使用 正則表達式
關鍵詞:VI,vi編輯器, shell
1、關於文本編輯器 vim
文本編輯器有不少,好比圖形模式的gedit、kwrite、OpenOffice ... ... ,文本模式下的編輯器有vi、vim(vi的加強版本)和nano ... ... vi和vim是咱們在Linux中最經常使用的編輯器。咱們有必要介紹一下vi(vim)最簡單的用法,以讓Linux入門級用戶在最短的時間內學會使用它。 windows
nano工具和DOS操做系統下的edit操做類似,使用簡單,咱們不做介紹了,若是您有興趣,不妨嘗試一下; 服務器
2、vi 編輯器 編輯器
爲何要學會簡單應用vi? 工具
vi或vim是Linux最基本的文本編輯工具,vi或vim雖然沒有圖形界面編輯器那樣點鼠標的簡單操做,但vi編輯器在系統管理、服務器管理中,永遠不是圖形界面的編輯器能比的。當您沒有安裝X-windows桌面環境或桌面環境崩潰時,咱們仍須要字符模式下的編輯器vi;vi或vim 編輯器在建立和編輯簡單文檔最高效的工具; 學習
3、vi 編輯器的使用方法 spa
3.1 如何調用vi ; 操作系統
[root@localhost ~]# vi filename
3.2 vi 的三種命令模式
Command(命令)模式,用於輸入命令;
Insert(插入)模式,用於插入文本;
Visual(可視)模式,用於視化的的高亮並選定正文;
3.3 文件的保存和退出
Command 模式是vi或vim的默認模式,若是咱們處於其它命令模式時,要經過ESC鍵切換過來。
當咱們按ESC鍵後,接着再輸入:號時,vi會在屏幕的最下方等待咱們輸入命令;
:w 保存;
:w filename 另存爲filename;
:wq! 保存退出;
:wq! filename 注:以filename爲文件名保存後退出;
:q! 不保存退出;
:x 應該是保存並退出 ,功能和:wq!相同
3.4 光標移動
當咱們按ESC進入Command模式後,咱們能夠用下面的一些鍵位來移動光標;
j 向下移動一行;
k 向上移動一行;
h 向左移動一個字符;
l 向右移動一個字符;
ctrlb 向上移動一屏;
ctrlf 向下移動一屏;
向上箭頭 向上移動;
向下箭頭 向下移動;
向左箭頭 向左移動;
向右箭頭 向右移動;
咱們編輯一個文件時,對於 j、k、l和h鍵,還能在這些動做命令的前面加上數字,好比 3j,表示向下移動3行。
3.5 插入模式(文本的插入)
i 在光標以前插入;
a 在光標以後插入;
I 在光標所在行的行首插入;
A 在光標所在行的行末插入;
o 在光標所在的行的上面插入一行;
O 在光標所在的行的下面插入一行;
s 刪除光標後的一個字符,而後進入插入模式;
S 刪除光標所在的行,而後進入插入模式;
3.6 文本內容的刪除操做
x 一個字符;
#x 刪除幾個字符,#表示數字,好比3x;
dw 刪除一個單詞;
#dw 刪除幾個單詞,#用數字表示,好比3dw表示刪除三個單詞;
dd 刪除一行;
#dd 刪除多個行,#表明數字,好比3dd 表示刪除光標行及光標的下兩行;
d$ 刪除光標到行尾的內容;
J 清除光標所處的行與上一行之間的空格,把光標行和上一行接在一塊兒;
3.7 恢復修改及恢復刪除操做
u 撤消修改或刪除操做;
按ESC鍵返回Command(命令)模式,而後按u鍵來撤消刪除之前的刪除或修改;若是您想撤消多個之前的修改或刪除操做,請按多按幾回u。這和Word的撤消操做沒有太大的區別;
3.8 可視模式
在最新的Linux發行版本中,vi提供了可視模式,由於這個功能是vim纔有的。若是您用的vi沒有這個功能,就換成vim就有了。打開可視模式,按ESC鍵,而後按v就進入可視模式;
可視模式爲咱們提供了極爲友好的選取文本範圍,以高亮顯示;在屏幕的最下方顯示有;
-- 可視 --
或
--VISUAL--
進入可視模式,咱們就能夠用前面所說的命令行模式中的光標移動指令,能夠進行文本範圍的選取。
選取文本範圍有何用?
咱們能夠對某部份刪除做業,按d鍵就刪除了咱們選中的內容。
選中內容後,咱們按y就表示複製;按d表示刪除;
值得一提是的刪除的同時,也表示複製。咱們返回到命令模式,而後移動光標到某個位置,而後按shiftp鍵,就把剛纔刪除的內容貼上了。咱們先在這裏提一句,在後文,咱們還得詳細說說。
退出可視模式,仍是用ESC鍵;
3.9 複製和粘帖的操做
其實刪除也帶有剪切的意思,當咱們刪除文字時,能夠把光標移動到某處,而後按shiftp鍵就把內容貼在原處,而後再移動光標到某處,而後再按p或shiftp又能貼上;
p 在光標以後粘帖;
shiftp 在光標以前粘帖
來舉一例:
好比咱們想把一個文檔的第三行復制下來,而後帖到第五行的後面,咱們應該怎麼作呢?
有兩種方法;
第一種方法:
先把第三行刪除,把光標移動到第三行處,而後用dd動做,接着再按一下shiftp鍵。這樣就把剛纔刪除的第三行帖在原處了。
接着咱們再用k鍵移動光標到第五行,而後再按一下p鍵,這樣就把第三行的內容又帖到第五行的後面了;
第二種方法:
進入可視模式,按ESC鍵,而後按v鍵。移動鼠標指針,選中第三行的內容,而後按y鍵複製;再移動指針到第五行,最後按p鍵;
因此複製和粘貼操做,是命令模式、插入模式及可視模式的綜合運用;咱們要學會各類模式之間的切換,要經常使用ESC鍵;更爲重要的學會在命令模式下移動光標;
3.10 關於行號
有時咱們配置一個程序運行時,會出現配置文件X行出現錯誤 。這時咱們要用到行號相關的操做;
爲全部內容添加行號;
按ESC鍵,而後輸入:
:set number
光標所處位置
在屏幕的右下角,有相似以下的;
57,8 27%
在這之中,57表示第57行,8表示第8個字符;
3.11 查找和替換功能
3.11.1 查找
首先,咱們要進入ESC鍵,進入命令模式;咱們輸入/或?就進入查找模式了;
/SEARCH 注:正向查找,按n鍵把光標移動到下一個符合條件的地方;
?SEARCH 注:反向查找,按shiftn 鍵,把光標移動到下一個符合條件的
舉一例:好比我想在一個文件中找到swap單詞,我應該以下作;
首先按ESC鍵,進入命令模式,而後輸入;
/swap
或
?swap
3.11.2 替換
按ESC鍵進入命令模式;
:s /SEARCH/REPLACE/g 注:把當前光標所處的行中的SEARCH單詞,替換成REPLACE,並把全部SEARCH高亮顯示;
:%s /SEARCH/REPLACE 注:把文檔中全部SEARCH替換成REPLACE;
:#,# s /SEARCH/REPLACE/g 注:#號表示數字,表示從多少行到多少行,把SEARCH替換成REPLACE;
注:在這之中,g表示全局查找;咱們注意到,就是沒有替換的地方,也會把SEARCH高亮顯示;
舉例說明:
好比咱們有一篇文檔要修改;
咱們把光標所在的行,把全部單詞the,替換成THE,應該是:
:s /the/THE/g
咱們把整篇文檔的全部的the都替換成THE,應該是:
:%s /the/THE
咱們僅僅是把第1行到第10行中的the,替換成THE,應該是;
:1,10 s /the/THE/g
在Linux下開發通常都用vi編輯器來編寫代碼,就像Windows下用記事本寫文擋同樣編寫各類文檔,只是寫的代碼文件後綴名是.c或.cpp等;在之後的工做中,咱們天天的程序編寫、文件編輯等工做都得用到vi編輯器,因此對vi運用的熟練程度直接決定了你的工做效率。
網上有關vi使用方法的資料有不少,你能夠本身下載回來學習或直接學習Linux自帶的幫助手冊。無論你經過何種方式學習,下面的幾點是你必需要掌握並熟練運用的:
1、 Vi的三種工做模式的區別以及相互間的切換
Vi的工做模式爲:
1. 編輯模式
Vi 在初始啓動(打開文件)後首先進入編輯模式,在此模式下可移動光標、刪除文字、複製或粘貼文字等操做;
Vi語法:vi <文件名>;
2. 插入模式
當用戶在編輯模式下鍵入 i, a, o 等命令以後進入插入模式,除 Esc 以外的任何字符均將被當作是插入到編輯緩衝區中的字符,按Esc後切換到編輯模式;
3. 最後行模式
當用戶在編輯模式下鍵入「:」以後進入最後行模式,在此模式下可鍵入命令用來保存文件、讀取文件內容、執行 Shell 命令、設置 Vi 參數、以正則表達式的方式查找字符串或替換字符串等;
2、 編輯模式命令操做
1. 移動光標
要對正文內容進行修改,首先必須把光標移動到指定位置:
k、j、h、l 功能分別等同於上、下、左、右箭頭鍵
Ctrl+b 在文件中向上移動一頁(至關於 PageUp 鍵)
Ctrl+f 在文件中向下移動一頁(至關於 PageDown 鍵)
H 將光標移到屏幕的最上行(Highest)
nH 將光標移到屏幕的第 n 行
2H 將光標移到屏幕的第 2 行
M 將光標移到屏幕的中間(Middle)
L 將光標移到屏幕的最下行(Lowest)
nL 將光標移到屏幕的倒數第 n 行
3L 將光標移到屏幕的倒數第 3 行
w 在指定行內右移光標,到下一個字的開頭
e 在指定行內右移光標,到一個字的末尾
b 在指定行內左移光標,到前一個字的開頭
0 數字0,左移光標,到本行的開頭
$ 右移光標,到本行的末尾
^ 移動光標,到本行的第一個非空字符
2. 替換和刪除
以用其餘字符來替換光標所指向的字符,或從當前光標位置刪除一個或多 個字符:
rc 用 c 替換光標所指向的當前字符
nrc 用 c 替換光標所指向的前 n 個字符
5rc 用 c 替換光標所指向的前 5 個字符
x 刪除光標所指向的當前字符
nx 刪除光標所指向的前 n 個字符
3x 刪除光標所指向的前 3 個字符
dw 刪除光標右側的字
ndw 刪除光標右側的 n 個字
3dw 刪除光標右側的 3 個字
db 刪除光標左側的字
ndb 刪除光標左側的 n 個字
5db 刪除光標左側的 5 個字
dd 刪除光標所在行,並去除空隙
ndd 刪除 n 行內容,並去除空隙
3dd 刪除 3 行內容,並去除空隙
3. 粘貼和複製
從正文中刪除的內容(如字符、字或行)並無真正丟失,而是被剪切並複製到了一個內存緩衝區中。用戶可將其粘貼到正文中的指定位置:
p 小寫字母 p,將緩衝區的內容粘貼到光標的後面
P 大寫字母 P,將緩衝區的內容粘貼到光標的前面
yy 複製當前行到內存緩衝區
nyy 複製 n 行內容到內存緩衝區
5yy 複製 5 行內容到內存緩衝區
4. 搜索字符串
要查找文件中指定字或短語出現的位置,能夠 用 vi 直接進行搜索,而沒必要以手工方式進行。搜索方法是:鍵入字符 / ,後面跟以要搜索的字符串,而後 按回車鍵。編輯程序執行正向搜索(即朝文件末尾方向),並在找到指定字符串後,將光標停到該字符串的 開頭;鍵入 n 命令能夠繼續執行搜索,找出這一字符串下次出現的位置。用字符 ? 取代 / ,能夠實現反向 搜索(朝文件開頭方向)
5. 撤銷和重複
在編輯文檔的過程當中,爲消除某個錯誤的編輯命令形成的後果,能夠用撤消命令。另外,若是用戶但願在新 的光標位置重複前面執行過的編輯命令,可用重複命令:
u 撤消前一條命令的結果
. 重複最後一條修改正文的命令
6. 文本選中
vi 可進入到一種成爲 Visual 的模式,在該模式下,用戶能夠用光標移動命令可視地選擇文本,而後再執行其餘編輯操做,例如刪除、複製等:
v 字符選中命令
V 行選中命令
3、 插入模式命令操做
在編輯模式下正肯定位光標以後,可用如下命令切換到插入模式:
i 在光標左側輸入正文
a 在光標右側輸入正文
o 在光標所在行的下一行增添新行
O 在光標所在行的上一行增添新行
I 在光標所在行的開頭輸入正文
A 在光標所在行的末尾輸入正文
上面介紹了幾種切換到插入模式的簡單方法。另外還有一些命令,它們容許在進入插入模式以前首先刪去一段正文,從而實現正文的替換。這些命令包括:
s 用輸入的正文替換光標所指向的字符
ns 用輸入的正文替換光標右側n個字符
cw 用輸入的正文替換光標右側的字
ncw 用輸入的正文替換光標右側的 n 個字
cb 用輸入的正文替換光標左側的字
ncb 用輸入的正文替換光標左側的 n 個字
cd 用輸入的正文替換光標的所在行
ncd 用輸入的正文替換光標下面的 n 行
c$ 用輸入的正文替換從光標開始到本行末尾的全部字符
c0 用輸入的正文替換從本行開頭到光標的全部字符
4、 最後行模式命令操做
編輯模式下鍵入「:」,光標就跳到屏幕最後一行,並在那裏顯示冒號,用戶輸入的內容均顯示在屏幕的最後一行,按回車鍵,vi 執行命令;
1. 退出命令
ZZ 在編輯模式下能夠退出 vi 編輯程序,該命令保存對正文所做的修改,覆蓋原始文件;
:q 在未做修改的狀況下退出
:q! 放棄全部修改,退出編輯程序
:wq 將編輯的內容寫入原始文件並退出編輯程序(至關於 ZZ 命令)
2. 行號與文件
命令模式下,能夠規定命令操做的行號範圍。數值用來指定絕對行號;字符「.」表示光標所在行的行號;字符 符「$」表示正文最後一行的行號;簡單的表達式,例如「.+5」表示當前行往下的第 5 行;
編輯中的每一行正文都有本身的行號,用下列命令能夠移動光標到指定行:
:n 將光標移到第 n 行
:w 將編輯的內容寫入原始文件,用來保存編輯的中間結果
:w file 將編輯的內容寫入 file 文件,保持原有文件的內容不變
:a,bw file 將第 a 行至第 b 行的內容寫入 file 文件
:r file 讀取 file 文件的內容,插入當前光標所在行的後面
:e file 編輯新文件 file 代替原有內容
:f file 將當前文件重命名爲 file
:f 打印當前文件名稱和狀態,如文件的行數、光標所在的行號等
:345w file 將第 345 行寫入 file 文件
:3,5w file 將第 3 行至第 5 行寫入 file 文件
:1,.w file 將第 1 行至當前行寫入 file 文件
:.,$w file 將當前行至最後一行寫入 file 文件
:.,.+5w file 從當前行開始將 6 行內容寫入 file 文件
:1,$w file 將全部內容寫入 file 文件,至關於 :w file 命令
3. 字符串搜索
給出一個字符串,能夠經過搜索該字符串到達指定行。若是但願進行正向搜索,將待搜索的字符串置於兩個「 /」之間;若是但願反向搜索,則將字符串放在兩個「?」之間:
:/str/ 正向搜索,將光標移到下一個包含字符串 str 的行
:?str? 反向搜索,將光標移到上一個包含字符串 str 的行
:/str/w file 正向搜索,並將第一個包含字符串 str 的行
寫入 file 文件
:/str1/,/str2/w file 正向搜索,並將包含字符串 str1 的行至包含字符串 str2 的行寫 入 file 文件
4. 正文替換
利用 :s 命令能夠實現字符串的替換。具體的用法包括:
:s/str1/str2/ 用字符串 str2 替換行中首次出現的字符串 str1
:s/str1/str2/g 用字符串 str2 替換行中全部出現的字符串 str1
:.,$ s/str1/str2/g 用字符串 str2 替換正文當前行到末尾全部出現的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2 替換正文中全部出現的字符串 str1
:g/str1/s//str2/g 功能同上
從上述替換命令能夠看到:g 放在命令末尾,表示對搜索字符串的每次出現進行替換;不加 g,表示只對搜索 字符串的首次出現進行替換;g 放在命令開頭,表示對正文中全部包含搜索字符串的行進行替換操做。
5、 Shell切換
在編輯正文時,利用 vi 命令模式下提供的 shell 切換命令,無須退出 vi 便可執行 Linux 命令,十分方便,也能夠說是最後行模式。語法格式爲:
:! command 執行完 shell 命令 command 後回到 vi
另外,在編輯模式下,鍵入 K ,可命令 vi 查找光標所在單詞的手冊頁,至關於運行 man命令。