Vi 有三種模式,輸入模式(Inserting Mode)、指令模式(Command Mode)以及ex模式(Ex Mode)。在輸入模式下可以輸入文字,而指令模式下可以執行編輯文件、存檔等等指令;Ex模 :q 退出 CTRL-u 向上半頁
式用於執行另外一些功能,如查找、替換文本、多文件的操作等等。 要進入vi可以直接在Shell提示符下鍵入vi [文件名稱],如果該文件在當前目錄不存在,則vi創建之。
爲了進入輸入模式,有好幾種方法:
新增 (append)
a: 從光標所在位置後面開始添加內容,光標後的內容隨新增字符向後移動。
A: 從光標所在列最後面的地方開始添加內容。
插入 (insert)
i: 從光標所在位置前面開始插入內容,光標後的內容隨新增內容向後移動。
I: 從光標所在列的第一個非空白字符前面開始插入內容。
開始 (open)
o: 在光標所在列下新增一列並進入輸入模式。
O: 在光標所在列上方新增一列並進入輸入模式。
可以隨時用ESC鍵切換到指令模式,連續按一兩次就夠了,這時系統會發出嗶嗶聲以確定進入指令模式。然後再指令模式下有多種退出方法:
ZZ 保存並退出
:x 保存並退出
:wq 保存並退出
:w 保存並返回指令模式
:30,60w [新文件] 將30到60行的內容寫入[新文件]
:30,60w>> [文件] 將第30到60行的內容寫入[文件]的末尾
:q! 退出並丟掉所有未保存信息
Q 退出vi,激活ex
:e file2 在不離開vi的條件下編輯file2
:n 編輯下一個文件
:e! 回到當前編輯文件上次保存的狀態
Vi 基本編輯
【移動光標】
移動光標自然是編輯過程中的基本技能,這個步驟一定要熟練掌握。
常用的移動命令鍵有:
h 左移一個字符
j 下移一行
k 上移一行
l 右移一個字符
w,W 跳至後一個字(W忽略標點)
b,B 跳至前一個字(B忽略標點)
$ 至行尾
^ 至本行第一個非空字符
0 至行首
G 至緩衝區的起始處
nG n是整數,至第n行
CTRL-d 向下半頁
CTRL-f 向下一頁
CTRL-b 向上一頁
H 移動到當前窗口的第一列
M 移動到當前窗口的中間列
L 移動到視窗的最後列 │
e 移動到下個字的最後一個字母
n- 減號移動到上一列的第一個非空白字符,前面加上數字可以指定移動到以 上 n 列
n+ 加號移動到下一列的第一個非空白字符,前面加上數字可以指定移動到以下 n 列
fx 往右移動到 x 字符上
Fx 往左移動到 x 字符上
tx 往右移動到 x 字符前
Tx 往左移動到 x 字符前
; 配合 f 和 t 使用,重複一次
, 配合 f 和 t 使用,反方向重複一次
【編輯】
x 刪除光標所在字符,同時所在行的位於光標後的文字一起左移一格;如果刪除的是某行的最後一個字符,則刪除後光標左移一格
d 是刪除命令,它作用於文本對象,即可被移動命令跨過的文本塊。例如w可以用來跳至下一個字開始處,那麼dw從光標位置所在字刪至下一字開始處;6w將刪至光標所在字後第六個字開始處等等
dd 刪除光標所在的行
r 修改光標所在字符,r 後接着要修改的字符
R 進入取代狀態,新增內容會覆蓋原先內容,直到按 [ESC] 回到指令模式下止
s 刪除光標所在字符,並進入輸入模式
S 刪除光標所在的列,並進入輸入模式
u 撤消最近一次對文本的改動。標準版的vi只能執行一級撤消,而vim則可以多級
U 行撤消命令,用來撤消從光標最近一次移到該行時起對光標所在行做的全部改動
n( 左括號移動到句子的最前面,前面加上數字可以指定往前移動 n 個句子.句子以! . ? 三種符號來界定
n) 右括號移動到下個句子的最前面,前面加上數字可以指定往後移動 n 個句子
n{ 左括弧移動到段落的最前面,前面加上數字可以指定往前移動 n 個段落。段落以段落間的空白列界定
n} 右括弧移動到下個段落的最前面,前面加上數字可以指定往後移動 n 個段落
看到這裏,恐怕有的讀者已經開始吐舌頭了:這麼多"莫名其妙"的指令來編輯文本實在是太複雜了!還是那句話,"熟能生巧"。如果用的熟練了,利用這些命令來移動、編輯簡直都不是大腦在控制,你的手指已經足夠熟練爲你做好任何你想做的事情
【指令組成】
現在可以提一下vi的指令組成。上面也看到了,很多指令都是控制鍵和數字等結合起來控制的。沒錯!其中很多大致是由指令與範圍所構成。例如 dw 是由刪除指 d 與範圍 w 所組
成,代表刪除一個字 d(elete) w(ord) 。
指令列表有:
d 刪除(delete)
y 複製(yank)
p 放置(put)
c 修改(change)
範圍可以是下列幾個:
e 光標所在位置到該字的最後一個字母
w 光標所在位置到下個字的第一個字母
b 光標所在位置到上個字的第一個字母
$ 光標所在位置到該列的最後一個字母
0 光標所在位置到該列的第一個字母
) 光標所在位置到下個句子的第一個字母
( 光標所在位置到該句子的第一個字母
) 光標所在位置到該段落的最後一個字母
{ 光標所在位置到該段落的第一個字母
其實組合命令遠遠不止這些,更多的需要在實踐中慢慢體會。
【查找樣本】
在文本內移動的時候經常需要查找一定模式(Pattern)構成的文本,vi也提供了相應的命令鍵
/pattern 移至下一個包含pattern的行
?pattern 移至上一個包含pattern的行
/ 往下重複查找
? 往上重複查找
n 在同一方向重複查找
N 在相反方向重複查找
/pattern/+n 移至下一個pattern所在行後的第n行
?pattern?-n 移至上一個Pattern所在行前的第n行
/pattern/z- 重繪屏幕,使下一個包含pattern的行位於屏幕的最底行
% 移至與光標所在的括弧匹配成對的圓括弧或大括弧
【標記文本】
也可以將某段文本標記起來,方便以後跳轉
mchar 用字母char標記當前光標的位置
`char 移至char所標記處
'char 移至char標記所在行的開頭處
" 移至當前行上一次所在位置(在光標移動之後)――一個雙引號
'' 移至當前行上第一次所在位置的行的開頭處(在光標移動之後)――兩個單引號