所有的 Unix/linux 系統(tǒng)都會(huì)內(nèi)建 vi 文書(shū)編輯器,其他的文書(shū)編輯器則不一定會(huì)存在。但是目前我們使用比較多的是 vim 編輯器。
Vim是從 vi 發(fā)展出來(lái)的一個(gè)文本編輯器。提供了代碼補(bǔ)完、編譯及錯(cuò)誤跳轉(zhuǎn)等方便編程的功能特別豐富,在程序員中被廣泛使用。
簡(jiǎn)單的來(lái)說(shuō), vi 是老式的字處理器,不過(guò)功能已經(jīng)很齊全了,但是還是有可以進(jìn)步的地方。 vim 則可以說(shuō)是程序開(kāi)發(fā)者的一項(xiàng)很好用的工具。
基本上 vi/vim 共分為三種模式,分別是命令模式(Command mode),插入模式(Insert mode)和末行模式(Last line mode)
1. 如何進(jìn)入插入模式
命令 | 說(shuō)明 |
i | 光標(biāo)前一個(gè)字符插入 |
I | 行首插入 |
a | 光標(biāo)后一個(gè)字符插入 |
A | 行末插入 |
o | 向下新開(kāi)一行,插入行首 |
O | 向上新開(kāi)一行,插入行道 |
2. 如何進(jìn)入命令模式
按ESC 從插入模式或末行模式進(jìn)入命令模式
在命令模式下移動(dòng)光標(biāo):
3. 不同模式間的互相轉(zhuǎn)換
命令模式->末行模式 | 輸入冒號(hào) : |
末行模式->命令模式 | 輸入兩次 ESC |
4. 命令模式的命令:
命令 | 說(shuō)明 |
0 | 移動(dòng)至絕對(duì)行首 |
^ | 移動(dòng)至相對(duì)行首 |
$ | 移動(dòng)至行尾 |
j | 向下移動(dòng) |
k | 向上移動(dòng) |
h | 向左移動(dòng) |
l | 向右移動(dòng) |
M | 移動(dòng)至中間行 |
L | 移動(dòng)至最后一行的行首 |
行號(hào)+G | 移動(dòng)至指定行 |
G | 移動(dòng)至文件末尾 |
gg | 移動(dòng)至文件開(kāi)頭 |
w/W | 向后移動(dòng)一個(gè)字 |
b | 向前移動(dòng)一個(gè)字 |
{ | 按段移動(dòng),上移 |
} | 按段移動(dòng),下移 |
ctl+d | 向下翻半屏 |
ctl+u | 向上翻半屏 |
ctl+f | 向下翻一屏 |
ctl+b | 向上翻一屏 |
4.1 關(guān)于刪除
1
2
3
4
命令 | 說(shuō)明 |
x | 刪除光標(biāo)后一個(gè)字符 |
X | 刪除光標(biāo)前一個(gè)字符 |
dd | 刪除光標(biāo)所光標(biāo)所在行 |
n | dd刪除光標(biāo)后指定行數(shù) |
D | 刪除光標(biāo)后本行所有內(nèi)容,包含光標(biāo)所在字符 |
d0 | 刪除光標(biāo)前本行所有內(nèi)容,不包含光標(biāo)所在字符 |
全部刪除 | 按esc后,然后dG |
dw | 刪除光標(biāo)開(kāi)始位置字符,包含光標(biāo)所在字符 |
4.2 關(guān)于撤銷命令
命令 | 說(shuō)明 |
u | 一步一步撤銷 |
ctl+r | 反撤銷 |
4.3 關(guān)于重復(fù)命令
命令 | 說(shuō)明 |
. | 重復(fù)上一次操作的命令 |
4.4 關(guān)于文本行移動(dòng)
命令 | 說(shuō)明 |
>> | 文本行右移 |
<< | 文本行左移 |
4.5 關(guān)于選擇行
v 進(jìn)入“可視”,按鍵盤(pán)選擇行
4.6 關(guān)于復(fù)制/粘貼
命令 | 說(shuō)明 |
yy | 復(fù)制當(dāng)前行 |
n yy | 復(fù)制n行 |
yw | 復(fù)制單詞 |
p | 在光標(biāo)所在位置向下新開(kāi)辟一行,粘貼 |
4.7 關(guān)于復(fù)制多行
任務(wù):將第9行至第15行的數(shù)據(jù),復(fù)制到第16行
:9,15 copy 16 或:9,15 co 16
由此可有:
:9,15 move 16 或 :9,15 m 16 將第9行到第15行的文本內(nèi)容到第16行的后面
復(fù)制多行,然后粘貼。
1. 將光標(biāo)移動(dòng)到要復(fù)制的文本開(kāi)始的地方,按v
進(jìn)入可視模式。
2. 將光標(biāo)移動(dòng)到要復(fù)制的文本的結(jié)束的地方,按y復(fù)制。此時(shí)vim會(huì)自動(dòng)將光標(biāo)定位到選中文本的開(kāi)始的地方,并退出可視模式。
3. 移動(dòng)光標(biāo)到文本結(jié)束的地方,按p
粘貼。
全部刪除:按esc后,然后dG
全部復(fù)制:按esc后,然后ggyG
4.8 關(guān)于可視模式
命令 | 說(shuō)明 |
v | 按字符移動(dòng),選中文本 |
V | 按行移動(dòng),選中文本可視模式可以配合 d,y,>>,<<實(shí)現(xiàn)對(duì)文本塊的刪除,復(fù)制,左右移動(dòng) |
4.9 末行模式下 . 點(diǎn)號(hào)表示當(dāng)前行; $ 表示末行
例如,在末行模式下輸出
命令 | 說(shuō)明 |
1,.-3y | 表示復(fù)制第1行至光標(biāo)所在位的前3行 |
1,.+3y | 表示復(fù)制第1行至光標(biāo)所在位的后3行 |
.,.+3d | 表示刪除光標(biāo)所在行至光標(biāo)往行3行 |
4.10 關(guān)于替換操作
命令 | 說(shuō)明 |
r | 替換當(dāng)前字符 |
R | 替換當(dāng)前行光標(biāo)后的字符 |
4.11 關(guān)于查找命令
命令 | 說(shuō)明 |
/str | 光標(biāo)位置開(kāi)始向下查 |
?str | 光標(biāo)位置開(kāi)始向上查找 |
n | 下一個(gè) |
N | 上一個(gè) |
例如,查找Sock
4.12 關(guān)于替換命令s
把abc 全部替換成123
末行模式下,將光標(biāo)所在行的abc替換成123
:%s/abc/123/gi % 表示全部,整個(gè)文檔;
g 表示全部替換,
i 表示忽略大小寫(xiě),不加i表示區(qū)別大小寫(xiě)
末行模式下,將第一行至第10行之間的abc替換成123
:1,10s/abc/123/g
末行模式下,感嘆號(hào)!+命令可以在vi模式下執(zhí)行命令,例如
:!cp /root/abc.txt /root/abcd.tx
4.13 關(guān)于保存退出
所處模式 | 命令 |
末行模式下 | :wq 或 :x |
命令模式下 | ZZ |
4.14 關(guān)于不保存退出
5. 其它說(shuō)明
如何顯示行號(hào)
1. 末行模式輸入: set number/set nu 可以顯示行號(hào)
2.修改當(dāng)前用戶vimrc文件:
arvindeMacBook-Air:~ arvin$ vi ~/.vimrc
set nu 顯示行號(hào)
set ts=4 TAB縮進(jìn)字符數(shù)
或
Set tabstop=4
Set shiftwidth=4
【其中】:~/ 表示當(dāng)前用戶的家目錄
當(dāng)用vi編輯文件時(shí),非正常退出時(shí)將產(chǎn)生一個(gè)隱藏文件,原文件將不能修改,需要將隱藏文件刪除后才可以修改