vi編輯器的使用
1.vi的啓動與退出
1.1 vi 的啓動
輸入vi命令後,便進入全屏幕編輯環境,此時的狀態爲命令方式。
① vi 光標定在該緩衝區第一行第一列位置
② vi example 光標定在緩衝區第一行第一列位置
③ vi + example 光標定在文件最後一行第一列位置
④ vi +N example 光標定位在文件第N行第一列的位置(N:爲數字)
⑤ vi +/string example 光標定位在文件中第一次出現字符串string的行首位置。
1.2 vi 的應用方式
* 有兩種操作方式:命令方式、插入方式和ex轉義方式
* 命令方式下輸入的大、小寫是敏感的。
1.3 vi 的退出
建議 首先鍵入“ESC”鍵,以確保當前vi的狀態爲命令方式,輸入下列命令,退出vi。
① :w 將編輯緩衝區的內容寫入文件
:q 退出vi
② :wq 將上面兩步操作可以合成一步來完成。
③ :x 功能同上。
④ :q 退出vi,此時的正文沒有被更改過。
⑤ :q! 強行退出vi,使更新內容不寫回文件。
2.光標在窗口中移動
註釋
字 : 是由空格或標點符號分開的字母序列。
句子 :是以句號(.)、問號(?)或感嘆號(!)結束的字符序列,句子之間由兩個空格或一個回車分開。
段落 :一個段落前後各有一個或多個空白行。
2.1 字符及行間移動
命 令 結果
—————————— ——————————
↑ 或 k 向上移一行
↓ 或 j 向下移一行
← 或 h 或 退格鍵 左移一個字符
→ 或 l 或 空格 右移一個字符
o 移到當前行的開始
$ 移到當前行的結尾
+ 或 回車符 移到下一行的開始
- 移到上一行的開始
2.2 其它單位的移動
命 令 結果
——————— —---------—————————
w 移到下一個字或標點符號
W 移到下一個字
e 移到這個字或標點符號的結束
E 移到字的下一結尾
b 回到字或標點符號的開始
B 移回到字的開始
) 移到下一個句子的開始
( 移到這個句子的開始
} 移到下一段落的開始
{ 移到這一段落的上一開始
3.在緩衝區中移動窗口
命令 結果
——-——— --—------—————————
CTRL-F 向前(上)移動一滿屏幕
CTRL-D 向前(上)移動半屏幕
CTRL-B 向後(下)移動一滿屏幕
CTRL-U 向後(下)移動半屏幕
H 光標移動到屏幕頂部
M 光標移動到屏幕中間
L 光標移動到屏幕底部
注意 可在這些命令前加入數字n作爲前綴,使相應命令執行n次。但nG使光標定位在第n行。
4.光標在正文中的移動
命令 結果
——-——— --—------—————————
G 光標移動到文件的尾部
nG 光標移動到文件的第n行
: 0 光標移動到文件的第1行
: 1 光標移動到文件的第1行
: n 光標移動到文件的第n行
: $ 光標移動到文件的尾部
/string 光標向前移動到string首
?string 光標向後移動到string首
5.增加正文
命令 結果
——-——— ----------—------—————————
a 將輸入文本插入在光標之後
A 將輸入文本插入在當前行的行尾
i 將輸入文本插入在光標之前
I 將輸入文本插入在當前行的開始
o 將在當前行的下一行處打開一新行
O 將在當前行的上一行處打開一新行
注意 ESC:使編輯狀態從輸入方式切換到命令方式
6.修改正文
命令 結果
——-— ---------------------—------—————————
r 替換當前字符,不需按ESC。
R 從當前字符開始進行替換,至ESC鍵爲止。
nC 對從當前字符開始的n行字符進行替換,
直至鍵入ESC鍵爲止。
nc$ 同 nC。
ncw 對當前字符開始的n個字進行替換操作,
直至鍵入ESC鍵爲止。
ncc 對從當前字符開始的n行字符進行替換,
直至鍵入ESC鍵爲止。
ns 替換從當前字符開始的n個字符,直至鍵入
ESC鍵爲止。
nS 對從當前行開始的n行字符,進行替換,
直至鍵入ESC鍵爲止。
J 將當前行和下一行連接起來。
注意 n 爲數字,爲 1 時可省略。
7.刪除正文
7.1 x 與 X 命令的使用
命令 結果
——-— --------------—------—————————
x 刪除當前字符。
nx 刪除從當前字符開始的n個字符。
X 刪除當前字符的前一個字符。
nX 刪除當前字符的前n個字符。
注意 n 爲數字,爲 1 時可省略。
7.2 d與D命令的使用
用來將指定範圍內文本刪除,並存入緩衝區。
命令 結果
——-— --------------—------—————————
ndw 刪除以當前字開始的n個字。
nd$ 刪除以當前字符開始的n行字符。
ndd 刪除從當前行開始的n行。
D 與d$同義。
d) 刪除到下一句的開始。
d} 刪除到下一段的開始。
d 回車 刪除兩行。
:start,endd 刪除文件第start到end行
8.移動與複製正本
8.1 m命令的使用
將指定範圍的文本移動到指定位置。格式如下:
<起始行號>,<結束行號> m <目標行號>
例:: 3 , 14 m 56
: 7 , 52 m 0
8.2 t命令的使用
將指定範圍的文本複製到指定位置。格式如下:
<起始行號>,<結束行號> t <目標行號>
例: 1 , 14 t 60
7 , 52 t $
8.3 y與Y命令的使用
將指定範圍的文本複製到緩衝區,但不刪除其內容。
命令 結果
——-— --------------—------—————————
nyw 複製從當前字符開始的n個字;
ny$ 複製從當前字符開始的n行字符;
Y 與y$同義;
y) 複製到下一句的開始;
y} 複製到下一段的開始;
nyy 複製從當前行開始的n行;
y 回車 複製兩行;
9.重複和取消操作
命令 結果
——-— ----------------------—------—————————
. 重複上一次所執行的命令。
u 取消最後一次所做的修改或刪除。
U 取消此次到當前行來做的所有修改。
p 恢復當前緩衝區中內容。如緩衝區中內容是整
行信息,則放到當前行下面的一個新行;否則
將緩衝區的內容放到光標位置右邊。
P 同p操作。恢復整行信息時,放到當前行上面的
一個新行;否則,放到光標位置左邊。
:e! 重新編輯。廢棄對這次文件所做的全部修改,
重新從盤中讀入該文件,並開始編輯。
10.檢索和替換
10.1 字符串檢索命令
命令 結果
——-— ----------------------—------—————————
/string 從當前位置向後檢索字符串string,並將光標
定位在該串起始位置(向後循環檢 索 )。
?string 從當前位置向前檢索字符串string,並將光標
定位在該串起始位置( 向前循環檢索)。
// 重複上一條檢索命令,但方向是向後檢索。
?? 重複上一條檢索命令,但方向是向前檢索。
n 重複上一條檢索命令,而不管其檢索方向。
(即檢索方向不變)。
N 重複上一條檢索命令, 但檢索方向改向。
:g/string 檢索字符串string,光標定位在第一次檢索到
的string所在行的行首。
10.2 字符串替換命令
格式1 :[addr]s/s1/s2/ [option]
[addr] 表示檢索範圍,省略時表示當前行。
如: “1,20” :表示從第1行到20行;
“%” :表示整個文件,同“1,$”;
“. ,$” :從當前行到文件尾;
s 爲替換命令;s1 要被替換的串;s2 爲替換的串;
option : ? g 表示全局替換; ‚ c 進行確認 ;
? p 替代結果逐行顯示(Ctrl + L恢復屏幕);
„ 省略時僅對每行第一個匹配串進行替換;
格式2 :g/s1/s//s2/ [option]
11.其他命令
命令 結果
------—--—-— --------------—------————————
:set number 顯示行號。
:set nonumber 不顯示行號。
:set all 顯示vi各選項的設置情況。
:f 顯示當前文件及工作緩衝區狀況。
:r filename 將名爲filename的文件內容插入到
緩衝區當前行的下面。
:r ! cmd 執行命令cmd,並將結果插入到緩衝
區當前行的下面。