1、vi
vi是Linux系統(tǒng)中最經(jīng)典的文本編輯器。-
vi的核心設計思想:讓程序員的手指始終保持在鍵盤的核心區(qū)域,就能完成所有的編輯操作。
鍵盤核心區(qū)域示意圖 沒有圖形界面的環(huán)境下,要編輯文件,
vi是最佳的選擇。vi編輯器在系統(tǒng)管理、服務器管理編輯文件時,其功能永遠不是圖形界面的編輯器所能比擬的。在實際應用中,對
服務器上的文件進行簡單的修改可使用ssh命令遠程登錄到服務器,并使用vi編輯器進行快速的編輯。
常見需要修改的文件
-
源程序。 -
配置文件。如:ssh的配置文件~/.ssh/config。
vi的特點
-
沒有圖形界面的功能強大的編輯器。 - 只能是編輯
文本內(nèi)容,不能對字體、段落進行排版。 -
不支持鼠標操作。 -
沒有菜單。 -
只有命令。
2、vi和vim
-
vim是從vi發(fā)展出來的一個文本編輯器,它支持代碼補全、編譯及錯誤跳轉等方便編程的功能,在程序員中被廣泛使用,被稱為編輯器之神。 - 在很多
Linux發(fā)行版中,直接把vi做成了vim的軟鏈接。也就是說在終端中輸入vi命令打開的是vim文本編輯器。
3、打開和新建文件
vi 文件名
- 文件
已存在,就會打開這個文件。 - 文件
不存在,將會新建一個文件。
打開文件并定位到指定行
在實際應用中,有時候我們需要打開一個文件并定位到指定行。比如,在編譯運行某個程序時,發(fā)現(xiàn)某行代碼有錯誤,就可以使用下面的命令快速定位到出錯代碼的位置。
vi 文件名 +行號
- 只有
+而不指定行號,就會定位到文件的末尾。 - 只有
vi 文件名,則會定位到文件的開頭。
4、異常處理
- 如果
vi異常退出,在磁盤上可能會保存有交換文件。 - 再次使用
vi編輯該文件時,將會看到如下圖所示的提示信息。這時只需按下鍵盤上的d鍵刪除交換文件即可。
異常處理示意圖
5、vi的三種工作模式
1) 命令模式
- 使用
vi打開文件首先進入的是命令模式。命令模式是vi的入口。 - 通過
命令對文件進行常規(guī)的編輯操作。包括定位、翻頁、復制、粘貼、刪除等等。 - 其他圖形界面的編輯器中,通過
快捷鍵或鼠標實現(xiàn)的操作,在終端中都用命令模式來實現(xiàn)。
2) 末行模式
- 退出
vi返回控制臺,需要在末行模式下輸入命令。 - 末行模式是
vi的出口。
末行模式命令。
| 命令 | 作用 |
|---|---|
:w |
保存 |
:q |
退出。如果沒有保存,不允許退出 |
:q! |
強制退出,即不保存退出 |
:wq |
保存并退出 |
:x |
保存并退出 |
3) 編輯模式
- 編輯文字。
三種工作模式之間的切換示意圖
6、常用命令
- 重復次數(shù)
命令模式下,先輸入一個數(shù)字,再跟上一個命令(可以是移動選擇命令,也可以是編輯操作命令),可以讓該命令重復執(zhí)行指定次數(shù)。
- 移動和選擇
vi之所以快,關鍵在于能夠快速定位到要編輯的代碼行。
移動命令可以和編輯操作命令組合使用。
- 編輯操作
刪除、復制、粘貼、替換、縮排。
撤銷和重復
查找替換
編輯
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ā)過程中,一段功能相關的代碼通常會寫在一起,并且這段代碼之間沒有空行,這就是段落。vi中使用空行來區(qū)分段落。
| 命令 | 作用 |
|---|---|
{ |
上一段 |
} |
下一段 |
-
括號切換(程序)
在程序中開發(fā)過程中,()、[]和{}的使用頻率很高,并且都是成對出現(xiàn)的。
| 命令 | 作用 |
|---|---|
% |
括號匹配及切換 |
-
標記(程序)
| 命令 | 作用 |
|---|---|
mx |
添加標記x,其中x為標記名稱 |
'x |
直接定位到標記x所在的位置 |
說明
- 在程序開發(fā)過程中,若某一行代碼需要
作稍后處理,就可以對這行代碼進行標記。這樣就可以在需要時快速跳轉回來或執(zhí)行其他的編輯操作。 - 標記并
不會高亮顯示字體,只是一個隱藏的標記。 - 標記名稱只能是
a~z或A~Z之間的任意一個字母。 - 添加了標記的
行如果被刪除,則標記也同時被刪除。 - 在
其他行中添加了相同名稱的標記,則之前添加的標記會被替換。
8、選中文本
-
vi選中文本,需要先用Visual命令切換到可視模式。 -
vi提供了三種可視模式。
| 命令 | 模式 | 作用 |
|---|---|---|
v |
可視模式 | 從光標位置開始選擇文本 |
V |
可視行模式 | 選中光標經(jīng)過的完整行 |
Ctrl + v |
可視塊模式 | 選中垂直方向的文本 |
-
可視模式下可以與移動命令組合使用。如:ggVG命令能夠選中所有文本。 -
Esc鍵可撤銷選中,返回命令模式。
9、撤銷和恢復撤銷
| 命令 | 作用 |
|---|---|
u |
撤銷上一步操作 |
Ctrl + r |
恢復上一步操作 |
10、 刪除文本
| 命令 | 作用 |
|---|---|
x |
刪除光標所在字符,或刪除選中文本 |
d + 移動命令 |
刪除移動命令對應的內(nèi)容 |
dd |
刪除光標所在行 |
D |
刪除光標所在位置到行尾之間的內(nèi)容 |
說明
-
可視模式選中的文本,無論用x命令還是d命令,都可以刪除選中的文本。
刪除命令和移動命令常見的組合
| 組合 | 作用 |
|---|---|
dw |
刪除從光標所在位置到單詞末尾的內(nèi)容 |
d0 |
刪除從光標所在位置到行首的內(nèi)容 |
d} |
刪除從光標所在位置到段落結尾的內(nèi)容 |
ndd |
刪除從光標所在行開始往下的(n-1)行(其中n為數(shù)字) |
dnG |
刪除從光標所在行到指定行號的內(nèi)容(其中n為行號) |
d'x |
刪除從光標所在行到標記x所在行的內(nèi)容(其中x為標記名稱) |
注意
- 刪除的內(nèi)容包括
光標所在的位置以及光標所在的行。
11、復制和粘貼
-
vi提供了一個被復制文本的緩沖區(qū)。 -
復制命令將選中的文本保存在緩沖區(qū)。 -
刪除命令刪除的文本也被保存在緩沖區(qū)。 -
粘貼命令可以將緩沖區(qū)的文本插入到光標所在的位置。
| 命令 | 作用 |
|---|---|
y + 移動命令 |
復制 |
yy |
復制一行。nyy可復制多行(其中n為數(shù)字) |
p |
粘貼。np可粘貼多次(其中n為數(shù)字) |
說明
-
d、x命令類似于圖形界面的剪切操作(Ctrl + X)。 -
y命令類似于圖形界面的復制操作(Ctrl + C)。 -
p命令類似于圖形界面的粘貼操作(Ctrl + V)。
注意
-
vi的文本緩沖區(qū)只有一個。所以進行多次的復制、剪切操作,之前緩沖區(qū)的內(nèi)容會被覆蓋。 -
vi的文本緩沖區(qū)與系統(tǒng)的剪貼板并不是同一個。所以在其他軟件中使用Ctrl + C復制的內(nèi)容,在vi中不能通過p命令粘貼,只能在編輯模式下使用鼠標右鍵粘貼。
12、替換
| 命令 | 作用 | 工作模式 |
|---|---|---|
r |
替換當前字符 | 命令模式 |
R |
替換光標所在位置及往后的字符 | 替換模式 |
說明
-
R命令可進入替換模式,替換完成后按Esc鍵可返回命令模式。 -
替換命令的作用是不進入編輯模式,對文件進行輕量級修改。
13、縮排和重復執(zhí)行
- 在程序開發(fā)過程中,
縮排命令對于統(tǒng)一增加代碼的縮進非常有用。 - 在程序中,
縮進通常用來表示代碼的歸屬關系。代碼前面的空格越少,級別越高;代碼前面的空格越多,級別越低。 -
增加縮進:一次性在選中的代碼前增加4個空格。 -
減少縮進:一次性在選中的代碼前刪除4個空格。
| 命令 | 作用 |
|---|---|
>> |
增加縮進 |
<< |
減少縮進 |
. |
重復上次命令 |
說明
- 在
可視模式中,縮排命令只需用一個>或<。
14、查找
-
常規(guī)查找
| 命令 | 作用 |
|---|---|
/str |
查找str |
查找到指定內(nèi)容后,使用Next命令查找下一個出現(xiàn)的位置。
| 命令 | 作用 |
|---|---|
n |
查找下一個 |
N |
查找上一個 |
-
單詞快速匹配
| 命令 | 作用 |
|---|---|
* |
往后查找當前光標所在的單詞 |
# |
往前查找當前光標所在的單詞 |
說明
- 查找到的指定內(nèi)容會以
高亮的方式顯示。 - 如果不想看到
高亮顯示,查找一個文件中不存在的內(nèi)容即可。
15、查找并替換
-
vi中查找和替換命令需要在末行模式下執(zhí)行。
1) 全局替換
一次性替換文件中出現(xiàn)的所有舊文本。
:%s/舊文本/新文本/g
2) 可視區(qū)域替換
可視模式下選中要替換文本,使用下面的命令替換選中文本中出現(xiàn)的所有舊文本。
:s/舊文本/新文本/g
3) 確認替換(推薦使用)
全局替換命令末尾的g改成gc,則在替換時會有提示,這就是確認替換。
:%s/舊文本/新文本/gc
提示之后可能要輸入的命令:
| 命令 | 作用 |
|---|---|
y |
替換。如果有多個,則一次只替換一個 |
n |
不替換。如果有多個,則一次只取消替換一個 |
a |
替換所有 |
q |
退出替換 |
l |
替換最后一個,并把光標移動到行首 |
Ctrl + E |
向下滾屏 |
Ctrl + Y |
向上滾屏 |
16、插入
插入命令可以從命令模式切換到編輯模式 。
| 命令 | 作用 |
|---|---|
i |
在當前字符前插入文本 |
I |
在行首插入文本 |
a |
在當前字符后插入文本 |
A |
在行尾插入文本 |
o |
在當前行下面插入一空行,并把光標移動到空行行首 |
O |
在當前行上面插入一空行,并把光標移動到空行行首 |
1) 插入命令與數(shù)字的組合使用
-
在程序開發(fā)過程中,可能會遇到需要
重復N次的情況。如:需要在
vi中輸入N行Hello World??砂慈缦虏僮鬟M行:① 首先在命令模式中輸入數(shù)字
N,表示要重復N次。
② 緊接著輸入i進入編輯模式。
③ 在編輯模式中輸入要重復的內(nèi)容,即Hello World。
④ 最后按Esc鍵從編輯模式返回到命令模式,返回之后vi就會把②、③兩步的操作重復執(zhí)行(N - 1)次。
注意
- 正常開發(fā)時,進入編輯模式前
不要輸入數(shù)字。
2) 利用可視塊給多行代碼添加注釋
-
在程序開發(fā)過程中,可能會遇到需要
一次性給多行代碼添加注釋的情況。如:需要給
C語言的某一塊代碼添加注釋??砂慈缦虏僮鬟M行:① 首先在命令模式中把光標移動到需要添加注釋的
第1行代碼,并按數(shù)字0來到行首。
② 緊接著按Ctrl + v進入可視塊模式。
③ 在可視塊模式中按j鍵向下選中要添加注釋的代碼。
④ 再接著輸入I進入編輯模式,并在行首插入注釋符,即//。
⑤ 最后按Esc鍵從編輯模式返回到命令模式,返回之后vi就會在之前選中的每一行代碼前插入注釋符//。
注意
- 在
可視塊模式中使用i不能進入編輯模式,需要使用I進入編輯模式。
17、末行命令擴展
末行命令主要針對文件進行操作,包括保存、退出、保存并退出、搜索并替換、另存為、瀏覽文件、新建文件等等。
| 命令 | 作用 |
|---|---|
:e . |
打開內(nèi)置的文件瀏覽器,瀏覽當前目錄下的文件。使用j、k、Enter鍵可瀏覽或打開文件 |
:e 文件名 |
切換到當前目錄下指定的文件。不需要退出vi
|
:n 文件名 |
新建文件 |
:w 文件名 |
另存為。編輯的仍然是當前文件,不會切換文件 |
:%s///gc |
確認搜索并替換 |
說明
- 切換文件之前,必須保證當前文件
已保存。 - 在程序開發(fā)過程中,可以使用
w命令進行階段性備份。
18、分屏
分屏命令屬于vi的高級命令,使用它可以同時編輯和查看多個文件。
| 命令 | 作用 |
|---|---|
:sp [文件名] |
橫向分屏 |
:vsp [文件名] |
縱向分屏 |
說明
-
文件名不知道的情況下,可以使用:sp .命令(或:vsp .命令)。此命令打開的是內(nèi)置的文件瀏覽器,可瀏覽當前目錄下的文件。
切換分屏窗口
分屏窗口基于window,在實際操作時表現(xiàn)為基于Ctrl + W這個快捷鍵。也就是說,使用下面的命令之前需要先按Ctrl + W。
| 命令 | 作用 |
|---|---|
w |
切換到一個窗口 |
r |
互換窗口 |
c |
關閉當前窗口 |
q |
退出當前窗口。如果是最后一個窗口,則關閉vi
|
o |
關閉其他窗口 |