1雀扶、vi
vi
是Linux
系統(tǒng)中最經(jīng)典
的文本編輯器。-
vi
的核心設(shè)計思想:讓程序員的手指始終保持在鍵盤的核心區(qū)域肆汹,就能完成所有的編輯操作
愚墓。
沒有圖形界面的環(huán)境下,要編輯文件昂勉,
vi
是最佳的選擇浪册。vi
編輯器在系統(tǒng)管理
、服務(wù)器管理
編輯文件時岗照,其功能永遠(yuǎn)不是圖形界面的編輯器所能比擬的
议经。在實際應(yīng)用中,對
服務(wù)器
上的文件進(jìn)行簡單
的修改可使用ssh
命令遠(yuǎn)程登錄到服務(wù)器谴返,并使用vi
編輯器進(jìn)行快速的編輯煞肾。
常見需要修改的文件
-
源程序
。 -
配置文件
嗓袱。如:ssh
的配置文件~/.ssh/config
籍救。
vi
的特點
-
沒有圖形界面
的功能強(qiáng)大
的編輯器。 - 只能是編輯
文本內(nèi)容
渠抹,不能對字體蝙昙、段落進(jìn)行排版。 -
不支持鼠標(biāo)操作
梧却。 -
沒有菜單
奇颠。 -
只有命令
。
2放航、vi和vim
-
vim
是從vi
發(fā)展出來的一個文本編輯器烈拒,它支持代碼補全
、編譯
及錯誤跳轉(zhuǎn)
等方便編程的功能广鳍,在程序員中被廣泛使用荆几,被稱為編輯器之神
。 - 在很多
Linux
發(fā)行版中赊时,直接把vi
做成了vim
的軟鏈接吨铸。也就是說在終端中輸入vi
命令打開
的是vim
文本編輯器。
3祖秒、打開和新建文件
vi 文件名
- 文件
已存在
诞吱,就會打開這個文件舟奠。 - 文件
不存在
,將會新建一個文件房维。
打開文件并定位到指定行
在實際應(yīng)用中沼瘫,有時候我們需要打開一個文件并定位到指定行
平痰。比如编曼,在編譯運行某個程序時,發(fā)現(xiàn)某行代碼有錯誤
旭寿,就可以使用下面的命令快速定位
到出錯代碼的位置暴浦。
vi 文件名 +行號
- 只有
+
而不指定行號溅话,就會定位到文件的末尾
。 - 只有
vi 文件名
歌焦,則會定位到文件的開頭
飞几。
4、異常處理
- 如果
vi
異常退出独撇,在磁盤上可能會保存有交換文件
屑墨。 - 再次使用
vi
編輯該文件時,將會看到如下圖所示的提示信息纷铣。這時只需按下鍵盤上的d
鍵刪除交換文件即可卵史。
5、vi的三種工作模式
1) 命令模式
- 使用
vi
打開文件首先進(jìn)入的是命令模式搜立。命令模式是vi
的入口
以躯。 - 通過
命令
對文件進(jìn)行常規(guī)的編輯操作。包括定位
啄踊、翻頁
忧设、復(fù)制
、粘貼
颠通、刪除
等等址晕。 - 其他圖形界面的編輯器中,通過
快捷鍵
或鼠標(biāo)
實現(xiàn)的操作顿锰,在終端中都用命令模式
來實現(xiàn)谨垃。
2) 末行模式
- 退出
vi
返回控制臺,需要在末行模式下輸入命令撵儿。 - 末行模式是
vi
的出口
乘客。
末行模式命令
。
命令 | 作用 |
---|---|
:w |
保存 |
:q |
退出淀歇。如果沒有保存,不允許退出 |
:q! |
強(qiáng)制退出匈织,即不保存退出 |
:wq |
保存并退出 |
:x |
保存并退出 |
3) 編輯模式
- 編輯文字浪默。
三種工作模式之間的切換示意圖
6牡直、常用命令
- 重復(fù)次數(shù)
命令模式下,先輸入一個數(shù)字
纳决,再跟上一個命令
(可以是移動選擇
命令碰逸,也可以是編輯操作
命令),可以讓該命令重復(fù)執(zhí)行指定次數(shù)
阔加。
- 移動和選擇
vi
之所以快饵史,關(guān)鍵在于能夠快速定位到要編輯的代碼行
。
移動
命令可以和編輯操作
命令組合使用
胜榔。
- 編輯操作
刪除
胳喷、復(fù)制
、粘貼
夭织、替換
吭露、縮排
。
撤銷和重復(fù)
查找替換
編輯
7尊惰、移動命令
-
上
讲竿、下
、左
弄屡、右
命令 | 作用 |
---|---|
h |
向左 |
j |
向下 |
k |
向上 |
l |
向右 |
-
行內(nèi)
移動
命令 | 作用 |
---|---|
w |
向后移動一個單詞 |
b |
向前移動一個單詞 |
0 |
行首 |
^ |
行內(nèi)的第一個非空字符 |
$ |
行尾 |
-
行數(shù)
移動
命令 | 作用 |
---|---|
gg |
文件頂部 |
G |
文件末尾 |
ngg |
移動到指定數(shù)字的行(其中n 為數(shù)字) |
nG |
移動到指定數(shù)字的行(其中n 為數(shù)字) |
:n |
移動到指定數(shù)字的行(其中n 為數(shù)字) |
-
屏幕
移動
命令 | 作用 |
---|---|
Ctrl + b |
向上翻頁 |
Ctrl + f |
向下翻頁 |
H |
屏幕頂部 |
M |
屏幕中間 |
L |
屏幕底部 |
-
段落
移動(程序)
在程序開發(fā)過程中题禀,一段功能相關(guān)
的代碼通常會寫在一起,并且這段代碼之間沒有空行
膀捷,這就是段落
迈嘹。vi
中使用空行
來區(qū)分段落。
命令 | 作用 |
---|---|
{ |
上一段 |
} |
下一段 |
-
括號
切換(程序)
在程序中開發(fā)過程中担孔,()
江锨、[]
和{}
的使用頻率很高,并且都是成對出現(xiàn)
的糕篇。
命令 | 作用 |
---|---|
% |
括號匹配及切換 |
-
標(biāo)記
(程序)
命令 | 作用 |
---|---|
mx |
添加標(biāo)記x啄育,其中x為標(biāo)記名稱 |
'x |
直接定位到標(biāo)記x所在的位置 |
說明
- 在程序開發(fā)過程中,若某一行代碼需要
作稍后處理
拌消,就可以對這行代碼進(jìn)行標(biāo)記
挑豌。這樣就可以在需要時快速跳轉(zhuǎn)回來
或執(zhí)行其他的編輯操作
。 - 標(biāo)記并
不會高亮顯示
字體墩崩,只是一個隱藏
的標(biāo)記氓英。 - 標(biāo)記名稱只能是
a~z
或A~Z
之間的任意一個
字母。 - 添加了標(biāo)記的
行
如果被刪除
鹦筹,則標(biāo)記
也同時被刪除
铝阐。 - 在
其他行
中添加了相同名稱
的標(biāo)記,則之前
添加的標(biāo)記會被替換
铐拐。
8徘键、選中文本
-
vi
選中文本练对,需要先用Visual
命令切換到可視模式
。 -
vi
提供了三種
可視模式吹害。
命令 | 模式 | 作用 |
---|---|---|
v |
可視模式 | 從光標(biāo)位置開始選擇文本 |
V |
可視行模式 | 選中光標(biāo)經(jīng)過的完整行 |
Ctrl + v |
可視塊模式 | 選中垂直方向的文本 |
-
可視模式
下可以與移動
命令組合使用
螟凭。如:ggVG
命令能夠選中所有文本
。 -
Esc
鍵可撤銷選中它呀,返回命令模式
螺男。
9、撤銷和恢復(fù)撤銷
命令 | 作用 |
---|---|
u |
撤銷上一步操作 |
Ctrl + r |
恢復(fù)上一步操作 |
10纵穿、 刪除文本
命令 | 作用 |
---|---|
x |
刪除光標(biāo)所在字符下隧,或刪除選中文本 |
d + 移動命令 |
刪除移動命令對應(yīng)的內(nèi)容 |
dd |
刪除光標(biāo)所在行 |
D |
刪除光標(biāo)所在位置到行尾之間的內(nèi)容 |
說明
-
可視模式
選中的文本,無論用x
命令還是d
命令政恍,都可以刪除選中的文本汪拥。
刪除命令和移動命令常見的組合
組合 | 作用 |
---|---|
dw |
刪除從光標(biāo)所在位置到單詞末尾的內(nèi)容 |
d0 |
刪除從光標(biāo)所在位置到行首的內(nèi)容 |
d} |
刪除從光標(biāo)所在位置到段落結(jié)尾的內(nèi)容 |
ndd |
刪除從光標(biāo)所在行開始往下的(n-1) 行(其中n 為數(shù)字) |
dnG |
刪除從光標(biāo)所在行到指定行號的內(nèi)容(其中n 為行號) |
d'x |
刪除從光標(biāo)所在行到標(biāo)記x 所在行的內(nèi)容(其中x 為標(biāo)記名稱) |
注意
- 刪除的內(nèi)容包括
光標(biāo)所在的位置
以及光標(biāo)所在的行
。
11篙耗、復(fù)制和粘貼
-
vi
提供了一個被復(fù)制文本的緩沖區(qū)
迫筑。 -
復(fù)制
命令將選中的文本保存在緩沖區(qū)。 -
刪除
命令刪除的文本也被保存在緩沖區(qū)宗弯。 -
粘貼
命令可以將緩沖區(qū)的文本插入到光標(biāo)所在的位置脯燃。
命令 | 作用 |
---|---|
y + 移動命令 |
復(fù)制 |
yy |
復(fù)制一行。nyy 可復(fù)制多行(其中n 為數(shù)字) |
p |
粘貼蒙保。np 可粘貼多次(其中n 為數(shù)字) |
說明
-
d
辕棚、x
命令類似于圖形界面的剪切
操作(Ctrl + X
)。 -
y
命令類似于圖形界面的復(fù)制
操作(Ctrl + C
)邓厕。 -
p
命令類似于圖形界面的粘貼
操作(Ctrl + V
)逝嚎。
注意
-
vi
的文本緩沖區(qū)只有一個
。所以進(jìn)行多次的復(fù)制
详恼、剪切
操作补君,之前緩沖區(qū)的內(nèi)容會被覆蓋
。 -
vi
的文本緩沖區(qū)
與系統(tǒng)
的剪貼板
并不是同一個
昧互。所以在其他軟件中使用Ctrl + C
復(fù)制的內(nèi)容挽铁,在vi
中不能通過p
命令粘貼,只
能在編輯模式
下使用鼠標(biāo)右鍵
粘貼敞掘。
12叽掘、替換
命令 | 作用 | 工作模式 |
---|---|---|
r |
替換當(dāng)前字符 | 命令模式 |
R |
替換光標(biāo)所在位置及往后的字符 | 替換模式 |
說明
-
R
命令可進(jìn)入替換模式
,替換完成后按Esc
鍵可返回命令模式
玖雁。 -
替換
命令的作用是不進(jìn)入編輯模式
更扁,對文件進(jìn)行輕量級修改
。
13、縮排和重復(fù)執(zhí)行
- 在程序開發(fā)過程中疯潭,
縮排
命令對于統(tǒng)一增加代碼的縮進(jìn)
非常有用赊堪。 - 在程序中面殖,
縮進(jìn)
通常用來表示代碼的歸屬關(guān)系
竖哩。代碼前面的空格越少,級別越高
脊僚;代碼前面的空格越多相叁,級別越低
。 -
增加縮進(jìn)
:一次性在選中的代碼前增加4
個空格辽幌。 -
減少縮進(jìn)
:一次性在選中的代碼前刪除4
個空格增淹。
命令 | 作用 |
---|---|
>> |
增加縮進(jìn) |
<< |
減少縮進(jìn) |
. |
重復(fù)上次命令 |
說明
- 在
可視模式
中,縮排
命令只需用一個>
或<
乌企。
14虑润、查找
-
常規(guī)
查找
命令 | 作用 |
---|---|
/str |
查找str |
查找到指定內(nèi)容后,使用Next
命令查找下一個出現(xiàn)的位置加酵。
命令 | 作用 |
---|---|
n |
查找下一個 |
N |
查找上一個 |
-
單詞
快速匹配
命令 | 作用 |
---|---|
* |
往后查找當(dāng)前光標(biāo)所在的單詞 |
# |
往前查找當(dāng)前光標(biāo)所在的單詞 |
說明
- 查找到的指定內(nèi)容會以
高亮
的方式顯示拳喻。 - 如果不想看到
高亮
顯示,查找一個文件中不存在
的內(nèi)容即可猪腕。
15冗澈、查找并替換
-
vi
中查找和替換
命令需要在末行模式
下執(zhí)行。
1) 全局替換
一次性
替換文件
中出現(xiàn)的所有舊文本
陋葡。
:%s/舊文本/新文本/g
2) 可視區(qū)域替換
可視模式
下選中要替換文本亚亲,使用下面的命令替換選中文本
中出現(xiàn)的所有舊文本
。
:s/舊文本/新文本/g
3) 確認(rèn)替換(推薦使用)
全局替換
命令末尾的g
改成gc
腐缤,則在替換時會有提示捌归,這就是確認(rèn)替換
。
:%s/舊文本/新文本/gc
提示之后可能要輸入的命令:
命令 | 作用 |
---|---|
y |
替換岭粤。如果有多個惜索,則一次只替換一個 |
n |
不替換。如果有多個绍在,則一次只取消替換一個 |
a |
替換所有 |
q |
退出替換 |
l |
替換最后一個门扇,并把光標(biāo)移動到行首 |
Ctrl + E |
向下滾屏 |
Ctrl + Y |
向上滾屏 |
16、插入
插入命令可以從命令模式
切換到編輯模式
偿渡。
命令 | 作用 |
---|---|
i |
在當(dāng)前字符前插入文本 |
I |
在行首插入文本 |
a |
在當(dāng)前字符后插入文本 |
A |
在行尾插入文本 |
o |
在當(dāng)前行下面插入一空行臼寄,并把光標(biāo)移動到空行行首 |
O |
在當(dāng)前行上面插入一空行,并把光標(biāo)移動到空行行首 |
1) 插入命令與數(shù)字的組合使用
-
在程序開發(fā)過程中溜宽,可能會遇到需要
重復(fù)N次
的情況吉拳。如:需要在
vi
中輸入N
行Hello World
∈嗜啵可按如下操作進(jìn)行:① 首先在命令模式中輸入數(shù)字
N
留攒,表示要重復(fù)N次
煤惩。
② 緊接著輸入i
進(jìn)入編輯模式
。
③ 在編輯模式中輸入要重復(fù)的內(nèi)容
炼邀,即Hello World
魄揉。
④ 最后按Esc
鍵從編輯模式返回到命令模式,返回之后vi
就會把②拭宁、③兩步的操作重復(fù)執(zhí)行(N - 1)
次洛退。
注意
- 正常開發(fā)時,進(jìn)入編輯模式前
不要輸入數(shù)字
杰标。
2) 利用可視塊給多行代碼添加注釋
-
在程序開發(fā)過程中兵怯,可能會遇到需要
一次性給多行代碼添加注釋
的情況。如:需要給
C
語言的某一塊代碼
添加注釋腔剂∶角可按如下操作進(jìn)行:① 首先在命令模式中把光標(biāo)移動到需要添加注釋的
第1行代碼
,并按數(shù)字0
來到行首掸犬。
② 緊接著按Ctrl + v
進(jìn)入可視塊模式
袜漩。
③ 在可視塊模式中按j
鍵向下選中要添加注釋的代碼。
④ 再接著輸入I
進(jìn)入編輯模式登渣,并在行首插入
注釋符噪服,即//
。
⑤ 最后按Esc
鍵從編輯模式返回到命令模式胜茧,返回之后vi
就會在之前選中的每一行代碼前插入注釋符//
粘优。
注意
- 在
可視塊模式
中使用i
不能進(jìn)入編輯模式,需要使用I
進(jìn)入編輯模式呻顽。
17雹顺、末行命令擴(kuò)展
末行命令主要針對文件
進(jìn)行操作,包括保存
廊遍、退出
嬉愧、保存并退出
、搜索并替換
喉前、另存為
没酣、瀏覽文件
、新建文件
等等卵迂。
命令 | 作用 |
---|---|
:e . |
打開內(nèi)置的文件瀏覽器裕便,瀏覽當(dāng)前目錄下的文件。使用j 见咒、k 偿衰、Enter 鍵可瀏覽或打開文件 |
:e 文件名 |
切換到當(dāng)前目錄下指定的文件。不需要退出vi
|
:n 文件名 |
新建文件 |
:w 文件名 |
另存為。編輯的仍然是當(dāng)前文件下翎,不會切換文件 |
:%s///gc |
確認(rèn)搜索并替換 |
說明
- 切換文件之前缤言,必須保證當(dāng)前文件
已保存
。 - 在程序開發(fā)過程中视事,可以使用
w
命令進(jìn)行階段性備份
胆萧。
18、分屏
分屏命令屬于vi
的高級命令郑口,使用它可以同時編輯和查看多個文件
鸳碧。
命令 | 作用 |
---|---|
:sp [文件名] |
橫向分屏 |
:vsp [文件名] |
縱向分屏 |
說明
-
文件名
不知道的情況下,可以使用:sp .
命令(或:vsp .
命令)犬性。此命令打開的是內(nèi)置的文件瀏覽器,可瀏覽當(dāng)前目錄下的文件腾仅。
切換分屏窗口
分屏窗口基于window
乒裆,在實際操作時表現(xiàn)為基于Ctrl + W
這個快捷鍵。也就是說推励,使用下面的命令之前需要先按Ctrl + W
鹤耍。
命令 | 作用 |
---|---|
w |
切換到一個窗口 |
r |
互換窗口 |
c |
關(guān)閉當(dāng)前窗口 |
q |
退出當(dāng)前窗口。如果是最后一個窗口验辞,則關(guān)閉vi
|
o |
關(guān)閉其他窗口 |