1、
Unix
編輯器概述
編輯器是使用計算機的重要工具之一,在各類操做系統中,編輯器都是必不可少的部件。
Unix
及其類似的
ix
操做系統系列中,爲方便各類用戶在各個不一樣的環境中使用,提供了一系列的
ex
編輯器,包括
ex, edit,ed
和
vi.
其中
ex,edit,ed
都是行編輯器,如今已不多有人使用,
Unix
提供他們的緣由是考慮到知足各類用戶特別
是某些終端用戶的須要。
值得慶幸的是,
Unix
提供了全屏幕的
Vi
編輯器,這使咱們的工做輕鬆很多。很多
DOS
用戶抱怨
Vi
編輯器不象
DOS
下的編輯器如
edit
那麼好用,這是由於
Vi
考慮到各類用戶的須要,沒有使用某些通用的編輯鍵(在各個
不一樣的終端機上他們的定義是不一樣的,在某些終端機上甚至沒有這些鍵)。而是採用狀態切換的方法,但這
只是習慣的問題,一旦你熟練的使用上了
vi
你就會以爲它其實也很好用。
雖然 Vi採用了狀態切換的方法,但電腦的硬件及操做系統多種多樣,某些電腦的鍵盤上沒有特定的幾個功能鍵!那麼不就有某些功能不能用了?這個問題在 Unix 系統上也同樣,幾乎各大電腦廠商都有本身的 Unix 系統,而 vi 的操做方法也會隨之有點出入。這裏咱們採用 PC 的鍵盤來講明 vi 的操做,但在具體的環境中還要參考相應的資料,這一點是值得注意的。
2、Vi入門
(一)、進入vi
在系統提示字符(如$、#)下敲入vi <檔案名稱>,vi 能夠自動幫你載入所要編輯的文件或是開啓一個新文件(若是該文件不存在或缺乏文件名)。進入 vi 後螢幕左方會出現波浪符號,凡是列首有該符號就表明此列目前是空的。
(二)、兩種模式
如上所述,vi存在兩種模式:指令模式和輸入模式。在指令模式下輸入的按鍵將作爲指令來處理:如輸入 a,vi即認爲是在當前位置插入字符。而在輸入模式下,vi則把輸入的按鍵看成插入的字符來處理。指令模式切換到輸入模式只需鍵入相應的輸入命令便可(如a,A),而要從輸入模式切換到指令模式,則需在輸入模式下鍵入ESC鍵,若是不曉得如今是處於什麼模式,能夠多按幾回 [ESC],系統如發出嗶嗶聲就表示已處於指令模式下了。
付:在指令模式進入輸入模式的指令:
新增 (append)
a :從光標所在位置後面開始新增資料,光標後的資料隨新增資料向後移動。
A:從光標所在列最後面的地方開始新增資料。
插入 (insert)
i:從光標所在位置前面開始插入資料,光標後的資料隨新增資料向後移動。
I :從光標所在列的第一個非空白字元前面開始插入資料。
開始 (open)
o :在光標所在列下新增一列並進入輸入模式。
O: 在光標所在列上方新增一列並進入輸入模式。
(三)、退出vi
在指令模式下鍵入:q,:q!,:wq或:x(注意:號),就會退出vi。其中:wq和:x是存盤退出,而:q是直接退出,若是文件已有新的變化,vi會提示你保存文件而:q命令也會失效,這時你能夠用:w命令保存文件後再用:q 退出,或用:wq或:x命令退出,若是你不想保存改變後的文件,你就須要用:q!命令,這個命令將不保存文件而直接退出vi。 shell
┌───────────┬───────────────┐
│命令 │描述 │
├───────────┼───────────────┤
│zz │保存並退出 │
├───────────┼───────────────┤
│:w filename │寫入文件 │
├───────────┼───────────────┤
│:W │寫入文件 │
├───────────┼───────────────┤
│:x │保存(若是當前文件修改過)並退出│
├───────────┼───────────────┤
│:q! │不保存文件,直接退出 │
├───────────┼───────────────┤
│:q │退出vi │
app
(四)、基本編輯
配合通常鍵盤上的功能鍵,像是方向鍵、
[Insert]
、
[Delete]
等等,如今你應該已經能夠利用
vi
來編輯文件了。固然
vi
還提供其餘許許多多功能讓文字的處理更爲方便。
何謂編輯?通常認爲是文字的新增、修改以及刪除,甚至包括文字區塊的搬移、複製等等。先這裏介紹
vi
的如何作刪除與修改。(注意:在
vi
的原始觀念裏,輸入跟編輯是兩碼子事。編輯是在指令模式下操做
的,先利用指令移動光標來定位要進行編輯的地方,然後才下指令作編輯。)
刪除與修改文件的命令:
x
:
刪除光標所在字符。
dd
:刪除光標所在的列。
r
:修改光標所在字元,
r
後接著要修正的字符。
R
:
進入取替換狀態,新增文字會覆蓋原先文字,直到按
[ESC]
回到指令模式下爲止。
s
:
刪除光標所在字元,並進入輸入模式。
S
:
刪除光標所在的列,並進入輸入模式。
其實呢,在
PC
上根本沒有這麼麻煩!輸入跟編輯均可以在輸入模式下完成。例如要刪除字元,直接按
[Delete]
不就得了。而插入狀態與取代狀態能夠直接用
[Insert]
切換,犯不著用什麼指令模式的編
輯指令。不過就如前面所提到的,這些指令幾乎是每臺終端機都能用,而不是僅僅在
PC
上。
在指令模式下移動光標的基本指令是
h, j, k, l
。想來各位如今也應該能猜到只要直接用
PC
的方向鍵就能夠了,並且不管在指令模式或輸入模式下均可以。多容易不是。固然
PC
鍵盤也有不足之處。有個很好用的指令
u
能夠恢復被刪除的文字,而
U
指令則能夠恢復光標所在列的全部改變。這與某些電腦上的
[Undo]
按鍵功能相同。
3、附件:
vi
詳細指令表
進入
vi
的命令
vi filename:
打開或新建文件,並將光標置於第一行首
vi +n filename:
打開文件,並將光標置於第
n
行首
vi + filename:
打開文件,並將光標置於最後一行首
vi +/pattern filename:
打開文件,並將光標置於第一個與
pattern
匹配的串處
vi -r filename:
在上次正用
vi
編輯時發生系統崩潰,恢復
filename
vi filename....filename:
打開多個文件,依次進行編輯
移動光標類命令
h:
光標左移一個字符
l:
光標右移一個字符
space:
光標右移一個字符
Backspace:
光標左移一個字符
k
或
Ctrl+p:
光標上移一行
j
或
Ctrl+n:
光標下移一行
Enter:
光標下移一行
w
或
W :
光標右移一個字至字首
b
或
B :
光標左移一個字至字首
e
或
E :
光標右移一個字至字尾
):
光標移至句尾
(:
光標移至句首
}:
光標移至段落開頭
{:
光標移至段落結尾
nG:
光標移至第
n
行首
n+:
光標下移
n
行
n-:
光標上移
n
行
n$:
光標移至第
n
行尾
H:
光標移至屏幕頂行
M:
光標移至屏幕中間行
L:
光標移至屏幕最後行
0:
光標移至當前行首
$:
光標移至當前行尾
屏幕翻滾類命令
Ctrl+u:
向文件首翻半屏
Ctrl+d:
向文件尾翻半屏
Ctrl+f:
向文件尾翻一屏
Ctrl
+
b:
向文件首翻一屏
nz:
將第
n
行滾至屏幕頂部,不指定
n
時將當前行滾至屏幕頂部。
插入文本類命令
i:
在光標前
I:
在當前行首
a:
光標後
A:
在當前行尾
o:
在當前行之下新開一行
O:
在當前行之上新開一行
r:
替換當前字符
R:
替換當前字符及其後的字符,直至按
ESC
鍵
s:
從當前光標位置處開始,以輸入的文本替代指定數目的字符
S:
刪除指定數目的行,並以所輸入文本代替之
ncw
或
nCW:
修改指定數目的字
nCC:
修改指定數目的行
刪除命令
ndw
或
ndW:
刪除光標處開始及其後的
n-1
個字
do:
刪至行首
d$:
刪至行尾
ndd:
刪除當前行及其後
n-1
行
x
或
X:
刪除一個字符,
x
刪除光標後的,而
X
刪除光標前的
Ctrl+u:
刪除輸入方式下所輸入的文本
搜索及替換命令
/pattern:
從光標開始處向文件尾搜索
pattern
?pattern:
從光標開始處向文件首搜索
pattern
n:
在同一方向重複上一次搜索命令
N:
在反方向上重複上一次搜索命令
:s/p1/p2/g:
將當前行中全部
p1
均用
p2
替代
:n1,n2s/p1/p2/g:
將第
n1
至
n2
行中全部
p1
均用
p2
替代
:g/p1/s//p2/g:
將文件中全部
p1
均用
p2
替換
選項設置
all
:列出全部選項設置狀況
term
:設置終端類型
ignorance
:在搜索中忽略大小寫
list
:顯示製表位
(ctrl+i)
和行尾標誌(
$)
number
:顯示行號
report
:顯示由面向行的命令修改過的數目
terse
:顯示簡短的警告信息
warn
:在轉到別的文件時若沒保存當前文件則顯示
no write
信息
nomagic
:容許在搜索模式中,使用前面不帶
「/」
的特殊字符
nowrapscan
:禁止
vi
在搜索到達文件兩端時,又從另外一端開始
mesg
:容許
vi
顯示其餘用戶用
write
寫到本身終端上的信息
最後行方式命令
:
n1,n2 co n3
:將
n1
行到
n2
行之間的內容拷貝到第
n3
行下
:
n1,n2 m n3
:將
n1
行到
n2
行之間的內容移至到第
n3
行下
:
n1,n2 d
:將
n1
行到
n2
行之間的內容刪除
:
w
:保存當前文件
:
e filename
:打開文件
filename
進行編輯
:
x
:保存當前文件並退出
:
q
:退出
vi
:
q!
:不保存文件並退出
vi
:
!command
:執行
shell
命令
command
:
n1,n2 w!command
:將文件中
n1
行至
n2
行的內容做爲
command
的輸入並執行之,若不指定
n1
,
n2
,則表示將整個文件內容做爲
command
的輸入
:
r!command
:將命令
command
的輸出結果放到當前行
寄存器操做
"?nyy
:將當前行及其下
n
行的內容保存到寄存器?中,其中
?
爲一個字母,
n
爲一個數字
"?nyw
:將當前行及其下
n
個字保存到寄存器?中,其中
?
爲一個字母,
n
爲一個數字
"?nyl
:將當前行及其下
n
個字符保存到寄存器?中,其中
?
爲一個字母,
n
爲一個數字
"?p
:取出寄存器?中的內容並將其放到光標位置處。這裏?能夠是一個字母,也能夠是一個數字
ndd
:將當前行及其下共
n
行文本刪除,並將所刪內容放到
1
號刪除寄存器中。