vi編輯器
vi是一個命令,也是一個命令行下的編輯器,它有如下功能:
a. 打開文件、新建文件、保存文件
b. 光標移動
c. 文本編輯
d. (多行間|多列間)復制、粘貼、刪除
e. 查找和替換
很多人不習慣在命令行下編輯文件,實際開發中也不會經常在命令行下編輯文件。但是在Linux系統中對文件做些簡單修改時,使用vi命令的效率非常高。並且在很多時候,比如現場調試時,並沒有GUI形式的編輯工具,vi是唯一選擇。
1. 模式
vi編輯器有三種模式,各個模式側重點不一樣:
a. 一般模式(光標移動、復制、粘貼、刪除)
b. 編輯模式(編輯文本)
c. 命令行模式(查找和替換)
vi編輯器的三種模式間切換如下圖所示
注意:
a. 當不知道處於何種模式時,按ESC鍵返回到一般模式。
b. wq(write quit)
c. i(insert)
2. 文件的打開、新建、保存
打開文件、新建文件,命令如下(如果文件存在則打開文件,否則新建文件並打開):
$ vi 文件名
修改結束之后,輸入“:” 進入命令行模式,再輸入“wq”保存退出:
:wq 保存並退出文件
注意:如果文件不存在,也需要輸入“:wq”才可以保存新文件,否則不會新建文件。
在編輯完成時,返回一般模式,方法如下:
a. 輸入“:w”則保存文件,如果已經保存文件,輸入“:q”則退出文件
b. 直接輸入“:wq”保存並退出
c. 如果不想保存被修改的內容,則輸入“:q!”強制退出
這些命令列表如下:
命令 |
描述 |
x |
保存當前文檔並且退出。 |
q |
退出。 |
w |
保存文檔 。 |
q! |
退出 vi/vim,不保存文檔。 |
3. 編輯文件
打開文件后,默認處於“一般模式”,這時可以輸入以下字母:
指令 |
描述 |
i |
在當前光標所在字符的前面,轉為編輯模式。 |
I |
在當前光標所在行的行首轉換為編輯模式。 |
a |
在當前光標所在字符的后面,轉為編輯模式。 |
A |
在光標所在行的行尾,轉換為編輯模式。 |
o |
在當前光標所在行的下方,新建一行,並轉為編輯模式。 |
O |
在當前光標所在行的上方,新建一行,並轉為編輯模式。 |
4. 快速移動光標
在一般模式下,可以使用下面快捷鍵移動光標或是翻頁:
移動光標 |
|
h (或左方向鍵) |
光標左移一個字符。 |
l (或右方向鍵) |
光標右移一個字符。 |
j (或下方向鍵) |
光標下移一行。 |
k (或上方向鍵) |
光標上移一行。 |
nG或ngg |
光標移動到第 n行首。 |
n+ |
光標下移 n行。 |
n- |
光標上移 n行。 |
屏幕翻滾 |
|
Ctrl + f |
屏幕向下翻一頁,相當於下一頁。 |
Ctrl + b |
屏幕向上翻一頁,相當於上一頁。 |
詳細介紹如下:
1)快速的定位到某一行:文件頭、文件尾、指定某一行
ngg //光標移至第n行的行首(n為數字,想要跳轉的行),
1gg //就跳到第一行的行首,就是文件頭
2gg //就跳到第二行的行首
G //轉至文件結尾
2)在某一行如何快速定位到某一列:
0 //(數字零)光標移至當前行行首
$ //光標移至當前行行末
fx //搜索當前行中下一個出現字母x的地方
注意:當你不知道vi當前處於何種模式時,使用esc鍵返回到一般模式。
5. 文本復制、粘貼、刪除、撤銷
在一般模式下,可以執行以下命令。
復制、刪除和粘貼 |
|
cc |
刪除整行,並且修改整行內容。 |
dd |
刪除該行,不提供修改功能。 |
ndd |
刪除當前行向下 n行。 |
x |
刪除光標所在的字符。 |
X |
刪除光標前面的一個字符。 |
nyy |
復制當前行及其下面 n行。 |
p |
粘貼最近復制的內容。 |
s |
刪除光標所在字符。 |
r |
替換光標處字符。 |
1) 復制
yy //復制當前行(y:yank(復制))
nyy //復制當前行及其后的n-1行(n是數字)
2) 粘貼
p //粘貼(p:paste)
3) 刪除
dd //刪除光標所在行(d:delete)
ndd //刪除當前行及其后的n-1行(n是數字)
x //刪除光標所在位置的字符
4) 撤銷
u //撤銷上一步操作
6. 文本查找和替換
在一般模式下,可以執行以下命令。
1) 查找
/pattern //從光標開始處向文件尾搜索pattern,后按下n或N
注意:
n 在同一個方向重復上一次搜索命令
N 在反方向重復上一次搜索命令
注意:
在/pattern之前先跳到第一行則進行全文件搜索。
2) 替換
:%s/p1/p2/g //將文件中所有的p1均用p2替換
:%s/p1/p2/gc //替換時需要確認
“s“ 全稱:substitute替換;
“g“ 全稱:global全局;
“c“ 全稱:confirm,確認
參考https://www.runoob.com/linux/linux-command-manual.html