vi用法
VI命令可以說(shuō)是Unix/linux世界里最常用的編輯文件的命令了,但是因?yàn)樗拿罴姸?,很多人都不?xí)慣使用它,其實(shí)您只需要掌握基本命令,然后加以靈活運(yùn)用,就會(huì)發(fā)現(xiàn)它的優(yōu)勢(shì),并會(huì)逐漸喜歡使用這種方法。本文旨在介紹VI的一些最常用命令和高級(jí)應(yīng)用技巧。
一、基本命令介紹
---- 1.光標(biāo)命令
k、j、h、l——上、下、左、右光標(biāo)移動(dòng)命令。雖然您可以在linux中使用鍵盤(pán)右邊的4個(gè)光標(biāo)鍵,但是記住這4個(gè)命令還是非常有用的。這4個(gè)鍵正是右手在鍵盤(pán)上放置的基本位置。
nG——跳轉(zhuǎn)命令。n為行數(shù),該命令立即使光標(biāo)跳到指定行。
Ctrl+G——光標(biāo)所在位置的行數(shù)和列數(shù)報(bào)告。
w、b——使光標(biāo)向前或向后跳過(guò)一個(gè)單詞。
---- 2.編輯命令
i、a、r——在光標(biāo)的前、后以及所在處插入字符命令(i=insert、a=append、r=replace)。
cw、dw——改變(置換)/刪除光標(biāo)所在處的單詞的命令 (c=change、d=delete)。
x、d$、dd——刪除一個(gè)字符、刪除光標(biāo)所在處到行尾的所有字符以及刪除整行的命令。
按ESC跳出編輯模式到命令模式
---- 3.查找命令
---- /string、?string——從光標(biāo)所在處向后或向前查找相應(yīng)的字符串的命令。
---- 4.拷貝復(fù)制命令
---- yy、p——拷貝一行到剪貼板或取出剪貼板中內(nèi)容的命令。
二、常見(jiàn)問(wèn)題及應(yīng)用技巧
---- 1.在一個(gè)新文件中讀/etc/passwd中的內(nèi)容,取出用戶名部分。
---- vi file
---- :r /etc/passwd 在打開(kāi)的文件file中光標(biāo)所在處讀入/etc/passwd
---- :%s/:.*//g 刪除/etc/passwd中用戶名后面的從冒號(hào)開(kāi)始直到行尾的所有部分。
---- 您也可以在指定的行號(hào)后讀入文件內(nèi)容,例如使用命令“:3r /etc/passwd”從新文件的第3行開(kāi)始讀入 /etc/passwd的所有內(nèi)容。
---- 我們還可以使用以下方法刪掉文件中所有的空行及以#開(kāi)始的注釋行。
---- #cat squid.conf.default | grep -v '^$' | grep -v '^#'
---- 2.在打開(kāi)一個(gè)文件編輯后才知道登錄的用戶對(duì)該文件沒(méi)有寫(xiě)的權(quán)限,不能存盤(pán),需要將所做修改存入臨時(shí)文件。
---- vi file
---- :w /tmp/1 保存所做的所有修改,也可以將其中的某一部分修改保存到臨時(shí)文件,例如僅僅把第20~59行之間的內(nèi)容存盤(pán)成文件/tmp/1,我們可以鍵入如下命令。
---- vi file
---- :20,59w /tmp/1
---- 3.用VI編輯一個(gè)文件,但需要?jiǎng)h除大段的內(nèi)容。
---- 首先利用編輯命令“vi file”打開(kāi)文件,然后將光標(biāo)移到需要?jiǎng)h除的行處按Ctrl+G顯示行號(hào),再到結(jié)尾處再按Ctrl+G,顯示文件結(jié)尾的行號(hào)。(注:可以先用命令:set nu來(lái)顯示全部的行號(hào))
---- :23,1045d 假定2次得到的行號(hào)為23和1045,則把這期間的內(nèi)容全刪除,也可以在要?jiǎng)h除的開(kāi)始行和結(jié)束行中用ma、mb命令標(biāo)記,然后利用“:'a,'bd”命令刪除。
---- 4.在整個(gè)文件的各行或某幾行的行首或行尾加一些字符串。
---- vi file
---- :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”。
---- :%s/$/some string/g 在整個(gè)文件每一行的行尾添加“some string”。
---- :%s/string1/string2/g 在整個(gè)文件中替換“string1”成“string2”。
---- :3,7s/string1/string2/ 僅替換文件中的第3行到第7行中的“string1”成“string2”。
---- 注意: 其中s為substitute,%表示所有行,g表示global。
---- 5.同時(shí)編輯2個(gè)文件,拷貝一個(gè)文件中的文本并粘貼到另一個(gè)文件中。
---- vi file1 file2
---- yy 在文件1的光標(biāo)處拷貝所在行
---- :n 切換到文件2 (n=next)
---- p 在文件2的光標(biāo)所在處粘貼所拷貝的行
---- :n 切換回文件1
---- 6.替換文件中的字符串。
使用命令“:%s#/usr/bin#/bin#g”可以把文件中所有路徑/usr/bin換成/bin。也可以使用命令“:%s//usr/bin//bin/g”實(shí)現(xiàn),其中“”是轉(zhuǎn)義字符,表明其后的“/”字符是具有實(shí)際意義的字符,不是分隔符。(linux知識(shí)寶庫(kù))
--------------------------------------------------------------------------------------------
vi的簡(jiǎn)單用法:
進(jìn)入vi后 有兩種模式
1.編輯模式
2.命令模式
進(jìn)入vi后默認(rèn)是命令模式,所以不要亂按 就會(huì)得到dd的警告聲,要輸入文字的話 請(qǐng)按a后i 就可以開(kāi)始輸入文字拉!
輸入結(jié)束后 請(qǐng)按esc鍵回命令模式
輸入q就是退出
輸入wq就是存盤(pán)后退出
輸入q!放棄存盤(pán)強(qiáng)行退出
Vi 的使用
Vi 已經(jīng)是 Unix 系統(tǒng)中標(biāo)準(zhǔn)的文字編輯器, 每個(gè)網(wǎng)管人員都必須熟悉它, 因?yàn)槟銜?huì)在維護(hù)系統(tǒng)時(shí)常常遇到它.
Vi 對(duì)初學(xué)者而言, 第一印象總是不好, 覺(jué)得它難用. 其實(shí), 大家在用慣了辦公室軟件之后, 再回過(guò)頭來(lái)用這些未見(jiàn)過(guò)的怪物, 難免無(wú)法適應(yīng), 這是很正常的. 但別忘了, 各位都將是學(xué)校中重要網(wǎng)管的人員,您的角色不再是純粹的使用者, 而是一位面對(duì)復(fù)雜網(wǎng)絡(luò)的管理者及問(wèn)題解決者, 你必須能夠親手操控你的系統(tǒng), 設(shè)定你的系統(tǒng), 調(diào)整你的系統(tǒng), 而這個(gè)過(guò)程, 你就不得不去面對(duì) Vi.
不要拿 Word 的使用習(xí)慣來(lái)挑剔 Vi, 它們的作用方向不同, 風(fēng)格也不同, 一旦您能上手, 也許你會(huì)喜歡上它. Vi 是網(wǎng)絡(luò)管理人員的標(biāo)準(zhǔn)左右手.
So, 打開(kāi)你的心, 接受會(huì)比反彈更有收獲.
二. 開(kāi)啟檔案, 關(guān)閉檔案
vi 檔名 開(kāi)啟檔案
: 進(jìn)入命令列的方法
q 離開(kāi) (命令列)
wq 存盤(pán)然后離開(kāi) (命令列)
q! 放棄存盤(pán), 強(qiáng)迫離開(kāi) (命令列)
ZZ 存盤(pán)然后離開(kāi) (不在命令列使用)
:e 檔名 在 Vi 中開(kāi)啟檔案
三. Vi 的操作模式:
Vi 有二種主要的操作模式, ESC 鍵為單向的切換鍵(由本文輸入模式回到編輯命令模式)
編輯命令模式 : 要 vi 做一些特定目的的動(dòng)作. 如插入,附加,取代,修改,刪除,移動(dòng)光標(biāo),搜尋等等. 若是存盤(pán)等動(dòng)作, 則需在命令列中下達(dá), 欲切換至命令列, 需先按 :
本文輸入模式 : 在此模式下, 任何字符, 皆被視為輸入的數(shù)據(jù).
一開(kāi)始進(jìn)入 Vi 之后, 即進(jìn)入編輯命令模式, 你輸入的每一個(gè)字符, 皆被預(yù)視為一個(gè)指令. 有效的指令會(huì)被接受, 若是無(wú)效的指令, 會(huì)產(chǎn)生 beep beep 聲, 以示警告.
若想做輸入的動(dòng)作, 必須切換為本文輸入模式, 切換的方法, 只要單按一個(gè)特殊意義的字符鍵即可, 如下所示:
按 i 或 I 插入狀態(tài)
按 a 或 A 附加狀態(tài)
按 R 取代狀態(tài)R 會(huì)進(jìn)行連續(xù)字符取代
按 s 或 S 刪除一個(gè)字符;刪除光標(biāo)所在那一列
按 cw, c2b, c$, c0 修改狀態(tài)
按 o 或 O 新增空白列
你不必一下子全用上, 只要會(huì) i, a, o 這個(gè)三個(gè)模式即可勝任愉快, 因?yàn)榇蟛糠輹r(shí)候, 你也只用這三個(gè).
OK, 現(xiàn)在你可以試著在本文輸入模式下, 鍵入一些資料看看. 然后, 按 ESC 切換回編輯命令模式.
四. 移動(dòng)光標(biāo):
Vi 為了適用于各種不同的終端機(jī)模式, 因此以字鍵的方式來(lái)操控光標(biāo).
k j h l 上 下 左 右
Enter 換列
w b 往前一個(gè) word ; 倒退一個(gè) word
0 $ 至該列開(kāi)頭 ; 至該列尾端
+ - 往下一列; 往上一列
請(qǐng)記住一個(gè)要訣:
在 Vi 中, 大部份的命令都可以在其前面加上數(shù)字, 該數(shù)字表示重復(fù)該命令的次數(shù).
例如: 8l 表示往右移動(dòng) 8 個(gè)字符, 3w 表示往前移動(dòng)三個(gè) word, 2b 表示倒退 2 個(gè) word
注: word 的定義, 連續(xù)英數(shù)字元形成一個(gè) word, 而其它特殊符號(hào)則每一個(gè)字符便是一個(gè) word(除非連續(xù)特殊字符), 例如: --classify 中含有 2 個(gè) word, 一個(gè)是 -- ; 一個(gè)是 classify
而 -x, 則有 3 個(gè) word.
在特殊的終端機(jī)模式下, 方向鍵也是可以使用的. 如 linux 或 vt100.
其實(shí)大部份時(shí)候, 你仍可以保有使用方向鍵的習(xí)慣. 但大概只有 local 下才能使用 PgUp , PgDn, End, Home 等鍵喔!
不過(guò), 若你所使用的終端機(jī)模式不支持方向鍵, 那么上表中的按鍵, 就相當(dāng)重要了.
五. 卷頁(yè):
ctrl+f 往下一頁(yè) (forward)
ctrl+b 往上一頁(yè) (before)
ctrl+d 往下半個(gè)屏幕(down)
ctrl+u 往上半個(gè)屏幕(up)
六. 跳列:
你可以指定跳至某一列位置. 跳動(dòng)之前, 先查看一下目前所在列數(shù)是多少.
ctrl+g 可以顯示目前的位置, 如: "ls.txt" line 53 of 264 --20%-- col 16-23
上面表示, 目前是在第 53 列, 全部共有 264 列, 占該檔百分之20的位置, 目前的光標(biāo), 實(shí)際是在第23行, 但只算成第16行, 因?yàn)橹虚g有使用 tab 鍵.
80G 或 80gg 跳至第 80 列
G 跳至文件尾
gg 跳至文件頭
七. 刪除: (但不會(huì)進(jìn)入本文輸入模式)
x 刪除一個(gè)字符
dd 刪除一行
r 取代一個(gè)字符
以上皆針對(duì)光標(biāo)目前的所在位置產(chǎn)生作用.
還有 dw, db, de, d0, d$ 等命令, 但你不須一下子全用上. 上表中這三個(gè)夠用了.
記住一個(gè)要訣: Vi 的命令繁多, 但你真正用上手的不必多, 而且這些也就夠了.
八. undo (回復(fù)動(dòng)作):
若你對(duì)上一個(gè)動(dòng)作反悔了, 可以使用 undo 的功能:
u 取消上一個(gè)動(dòng)作所產(chǎn)生的改變
U 取消光標(biāo)所在那一列所有的改變
:e! 取消所有的改變, 回復(fù)至未修改之前
九. 關(guān)鍵詞搜尋/取代:
/ 關(guān)鍵詞 往下搜尋關(guān)鍵詞
? 關(guān)鍵詞 往上搜尋關(guān)鍵詞
n 重復(fù)搜尋命令(不管往下或往上) (注:等于是“尋找下一個(gè)”)
N 和 n 相反方向
cw字符串 以該字符串取代原有的關(guān)鍵詞
n. 繼續(xù)取代該字符串的動(dòng)作
%s/目標(biāo)/取代/g 將目標(biāo)字符串全換成取代字符串
十. 選取、復(fù)制與搬移:
Y 或 yy 選取光標(biāo)所在那一列
5Y 或 5yy 選取光標(biāo)列所在共5列(5 只是一個(gè)例子, 可改用其它數(shù)字)
p 將選取的內(nèi)容, 復(fù)制至光標(biāo)之后
P 將選取的內(nèi)容, 復(fù)制至光標(biāo)之前
cw, x, dd 等刪除命令 會(huì)將被刪除的內(nèi)容放入 buffer 中, 配合 p 或 P 即可做出搬移的效果.
十一. 暫時(shí)跳出 Vi:
在編輯過(guò)程中, 你可能想要執(zhí)行其它命令, 方法如下:
:! 命令 執(zhí)行該令命
:sh 暫時(shí)跳出 Vi, 欲回 Vi 按 ctrl+d 或 exit