天天看點

VI編輯器用法詳解

摘要:指令模式/編輯模式/EX模式;

=================================================================

1.vi共分為三種方式(mode):

command方式:

任何輸入都會作為編輯指令,而不會出現在螢幕上,若輸入錯誤則有“岬”的聲音;任何輸入都引起立即反映

insert方式:

任何輸入的資料都置于編輯寄存器。在command方式下輸入(I,a,A等),可進入insert方式,insert方式下按ESC,可跳回command方式。

escape方式:

以“:”或者“/”為前導的指令,出現在螢幕的最下一行,任何輸入都被當成特别指令。

2.進入vi(在系統提示符下輸入以下指令):

vi  進入vi而不讀入任何檔案

vi filename 進入vi并讀入指定名稱的檔案(新、舊檔案均可)。

vi +n filename進入vi并且由檔案的第幾行開始。

vi +filename  進入vi并且由檔案的最後一行開始。

vi + /word filename 進入vi并且由檔案的word這個字開始。

vi filename(s)  進入vi并且将各指定檔案列入名單内,第一個檔案先讀入。

vedit 進入vi并且在輸入方式時會在狀态行顯示“INSERT MODE"。

編輯數個檔案(利用vi filename(s))進入vi後)

:args 顯示編輯名單中的各個檔案名

:n讀入編輯名單中的下一個檔案

:rew讀入編輯名單中的第一個檔案

:e# 讀入編輯名單内的前一個檔案

:e file 讀入另一個檔案進vi(此檔案可不在編輯名單内),若原檔案經修改還沒有存檔,則應先以: w 存檔。

:e! file強迫讀入另一個檔案進入vi,原檔案不作存檔動作。

存儲及退出vi

:w filename 存入指定檔案,但未退出vi(若未指定檔案名則為目前工作的檔案名)。

:wq 或者 :x或者zz 存檔案,并且退出vi.

:q不作任何修改并退出vi。

:q! 放棄任何修改并退出vi。

:!command 暫時退出vi并執行shell指令,執行完畢後再回到vi。

:sh 暫時退出vi到系統下,結束時按Ctrl + d則回到vi。

加資料指令

i 在關标位置開始插入字元,結束時候按ESC鍵。

I 在光标所在行的最前面開始加字,結束時按ESC鍵。

a 在光标位置後開始加字,結束時按ESC鍵。

A 在光标所在行的最後面開始加字,結束時按ESC鍵。

o 在光标下加一空白行并開始加字,結束時按ESC鍵。

O 在光标上加一空白行并開始加字,結束時按ESC鍵。

!command執行shell指令,并把結果加在光标所在行的下一行。

删除指令

nx删除由光标位置起始的n個字元(含光标位置,按一個x表示删除光标所在的字元)

nX 删除由光标位置起始的n個字元(不含光标位置)。

ndw删除光标位置其實的n個字元組(word)。

d0  将行的開始到光标位置的字元全部删除。

d$ 或D  将光标位置起始到行尾的字元全部删除。

ndd 将光标位置起始的n行(整行)删除(dd表示删除光标所在行)。

:start,endd 删除檔案的第start到end行。

關标移動

0 移到一行的開始

$ 移到一行的最後

[ 移到檔案開始位置

] 移到檔案結束位置

nh往左移n位

nl或者spacebar  往右移n位

nk向上移n行

n+向上移n行,光标在該行的起始

ni  向下移n行

n-向下移n行,光标在該行的起始

H 移到螢幕的左上角

M 移到螢幕的中間行開頭

L 移到螢幕的最後一行

G 移到檔案的最後一行

nG或者:n移到檔案的第n行

nw右移n個字組,标點符号屬于字組

nW右移n個字組,标點符号不屬于字組

nb左移n個字組,标點符号屬于字組

nB左移n個字組,标點符号不屬于字組

Ctrl + u螢幕上卷半個菜單

Ctrl + d  螢幕下卷半個菜單

Ctrl + b  螢幕上卷一個菜單

Ctrl + F  螢幕下卷一個菜單

修改指令

r 修改光标檔案的字元

R 從光标位置開始修改,結束時按ESC鍵

new 更改n組字元,結束時按ESC鍵

ncc 從光标所在位置開始更改n行,結束時按ESC鍵

重排各行長度

i 并按Enter将該行由光标所在處斷開,并進入insert方式

J 把下一行的資料連接配接到本行之後

尋找指令

/text從光标位置往下找字串text

?text 從光标位置往上找字串text

n繼續找下一個字串(在輸入上面的尋找指令之後使用)

尋找并且取代指令

:getxt1/s/ /text2/options 将各行的text1替換為text2

option=g表示檔案中所有的text1均被取代,若未輸入任何option,則隻有各行中的第一個出現的text1被取代

option=go 在螢幕顯示各取代的行

option=gc 在每個字串取代之前要求确認

Start,endgtext1/s/ / text2/options 同上,隻尋找并取代第start~end行。

或:Start,ends/text1/text2/options

複制及移動

:first,last co dest 将first 到last行的資料複制到目标行(dest)下面

:Start,endm dest将start 到 end行的資料移動到目标行(dest)下。

:r filename将指定檔案的内容讀入光标所在行下。

nY 将光标所在位置開始的n行資料暫存

p複制暫存資料在光标的下一行

P複制暫存資料在光标的上一行

其他指令

. 重複前一指令

u 取消前一指令

Ctrl + l重新整理螢幕顯示

:set number 顯示檔案的行号,但不會存檔案

:set nonumber 解除行号顯示

:set ai 設定每行起始位置(以光标目前位置為起始)

:set noai 取消行起始位置設定

:f 或<Ctrl> + g 告訴使用者有關現行編輯檔案的資料。

==================================================================

[文法]:vi [-wn] [-R] 檔案...

[說明]: vi 是一個基于行的全螢幕編輯器,可以在vi 中使用 ex,ed的全部指令,vi選項中 -wn 指将編輯視窗大小置為n行,-R 為将編輯的檔案置為隻讀模式, vi 工作模式分為指令模式和輸入模式,指令 a A i I o O c C s S R 可進入輸入模式,在輸入模式下按 ESC 鍵回到指令模式,在指令模式中敲入:指令,則可進入ex方式,在螢幕底部出現提示符 : ,此時可使用任意ex指令,螢幕底行也用來作/ ? ! 指令的提示行,大多數指令可以在其前面加數字,表示指令執行的重複次數

^B 退回前一頁,前面加數字表示重複次數,每次換頁時保留上一頁的兩行

^D 在指令模式下,表示下滾螢幕的一半,在輸入模式下,表示回退至左邊的自動縮進處

^E 顯示螢幕底線之下的一行

^F 前進一頁,前面加數字表示重複次數,每次換頁時

保留上一頁的兩行

^G 顯示目前檔案名,目前行号和檔案總行數,并用百分号目前行在

整個檔案中的位置

^H(倒退) 在指令模式下,光标左移一格;在輸入模式下,删去前面的字元

^I(TAB) 在輸入模式下,産生一串空格

^J(LF) 光标下移一行

^L 重新整理螢幕,即将螢幕重新顯示

^M(回車) 在指令模式下,光标移動至下行開頭

在輸入模式下,開辟一新行

^N 光标下移一行

^P 光标上移一行

^Q 在輸入模式下,将其後的非列印字元作為正文插入

^R 重新整理螢幕

^U 螢幕上滾一半,前面加數字時表示上滾的行數,此數字對

以後的^D ^U 指令有效

^V 在輸入模式下,将其後的非列印字元作為正文插入

^W 在輸入模式下,使光标回退一個字

^Y 顯示螢幕底線之上的一行

^Z 暫停編輯,退回上層Shell

^[(ESC) 退出輸入模式,回到指令模式

! 暫時退出編輯,執行Shell指令

(雙引号) 用于标志有名緩沖區,編号緩沖區1-9用于儲存被删去的正文,字

母名緩沖區a-z供使用者存放自定義的正文

$ 将光标移動到目前行尾,前加數字則表示前移行數,如2$表示移動

到下一行行尾

% 将光标移動到配對的小括号()或大括号{}上去

( 退回句子開頭

) 前移到句子開頭

- 退到上一行第一個非空格字元

. 重複上一次改變緩沖區内容的指令

/ 模式 向前搜尋模式,将光标移動到模式出現處,模式是一個正規

表達式,(參看 grep)

: 在螢幕底部提示:,其後可使用ex指令

? 功能同 / ,但方向是向前查找

[[ 光标回退至前一節分界處

轉意符

]] 光标前移至節分界處

^(不是CTRL) 光标移至目前行第一個非空字元上

' 連續兩個''表示将光标移至其移動前的位置,'後跟字母表示光标字

母标記的行首(參看 m 指令)

A 在行尾插入正文,進入輸入模式

B 光标回退一個字

C 替換光标後的内容

D 删除光标後的内容

E 光标前移到字尾

F 字元 在目前行向左查找指定字元

G 光标移動到其前面數字指定的行,若未指定則移動到最後一行

H 光标移動到螢幕頂行,若前面有數字,則移動到螢幕上該數字

指定的行

I 在行開頭插入正文

J 連接配接兩行,若前面有數字則連接配接數字指定的行

L 光标移動到螢幕底行,若前面有數字,則移動到螢幕底線往上數該

數字指定的行

M 光标移動到螢幕中線

N 使用模式查找/或?時,重複找下一個比對的模式,但方向與上次相

反,其功能同 n ,但方向相反

O 在目前行上開辟一新行

P 将上次被删除的正文插入光标前面,可在其前面加緩沖區編号,編

号1-9用于儲存被删去的正文,字母名緩沖區a-z供使用者存放自定

義的正文

Q 從vi 推出進入ex指令狀态

R 替換字元串

S 替換整行

T 字元 向左查找字元

U 将目前行恢複至第一次修改前的狀态

W 光标移至下一個字首

X 删除光标前的字元

Y 将目前行存入無名緩沖區,前面加數字表示存入的行數,也可用有

名緩沖區來儲存,以後可用指令p或P将其取出

ZZ 存盤退出vi

a 光标後插入正文

b 光标回退至上一個字首

cw 替換目前字

c) 替換目前句子

dw 删除一個字

dd 删除一行

e 光标移到下一個字末

f 字元 在目前行向前查找字元

h 光标左移一格

i 在光标前插入正文

j 光标下移一行

k 光标上移一行

l 光标右移一格

m 字母 用字母标記目前行,以後可用 '字母使光标移動到目前行,

(參看'指令)

n 重複上次 / 或 ? 指令

o 在目前行下開辟一新行

p 将使用者緩沖區内容放到光标位置(參看P指令)

r 替換目前字元

s 用一串字元替換目前字元

t 字元 光标移動至字元前

u 取消上次操作

w 光标移至下一字首

x 删除目前字元

yw 将目前字存入無名緩沖區,前面可加x,表示存入名字為x的有名

緩沖區(x為a-z),也可加數字表示存入的字數,以後可用P或p命

令取出

yy 将目前行存入無名緩沖區,用法參看yw

{ 光标移動至前一段開頭

| 光标移至行首,若前面加數字,則移到數字指定行的行首

} 光标移至下一段開頭

在:提示符下,常用指令如下:

:w 目前檔案存盤

:w! 強制存盤

:w 檔案 将内容寫入指定檔案

:w! 檔案 強制寫入指定檔案

:x,y w 檔案 将 x至 y 行寫入指定檔案中

:r 檔案 将檔案讀到光标位置

:r ! 指令 将系統指令的輸出讀到光标位置

:q 退出編輯

:q! 強制退出

:x 與指令ZZ相同

:e 檔案名 編輯另一檔案

:e ! 重新編輯檔案,放棄任何改變

:sh 執行sh,結束後回到編輯

:! 指令 執行指令後回到編輯

:n 編輯下一檔案

:n 檔案表 重新定義待編輯檔案表

:set 設定 vi 的選項,例如 set nu 表示每行前顯示行号,在選項前

加no則表示清除該選項,例如 set nonu 表示每行前不顯示行

号,下面是一些常用的選項:

ai 自動縮進

aw 編輯下一檔案前自動存盤

ic 查找字元串時不區分大小寫

nu 每行前顯示行号

sm 輸入)及}時顯示與之配對的( 或 {

slow 插入時延遲螢幕重新整理

ws 使查找能繞過檔案尾從頭進行

wa 寫檔案之前不作對檔案的檢查

Last line mode:

/exp Go forward to exp

?exp Go backward to exp

:w Write buffer to disk

:w newfile Write buffer to newfile

:w! file Write Absolutely

:q Quit editor

:q! Quit,discarding buffer

:wq Write buffer and quit

:x Write if needed & quit

:f Edit & file status

:r Read file into buffer

:r file Read named file in

:e (Re)edit file

:e! (Re)edit,discard file in

:e file Edit nameed file

:3,8d Delete lines 3-8

:4,9m 12 Move lines 4-9 to 12

:2,5t 13 Copy lines 2-5 to 13

:5,9w file Write lines 5-9 to file

:s/old/new/ Current line,sub first "old" w/ "new"

:s/old/new/g Current line,sub each "old" w/ "new"

:3,9s/old/new Lines 3-9,sub first "old" w/ "new"

:%s/old/new All lines,sub first "old" w/ "new"

:%s/old/new/g All lines,sub each "old" w/ "new"

:s/pat./new A . matches any charcter

:s/pat*/new A * matches 0 or more "t"s

:s/pa[0-9aeioA-Z]/new selection set or range

:s/pa[^aeiou]/new match any non-vowel

:s/^pat/new anchor "par" to beginning of line

:s/pats/new anchor "par" to end of line

:s/old/& and new/ restoe matched pattern on sub

:%s/./ &/ indenta whoie file

:set nu Display line numbers

:set nonu Turn off option

:set all Show all settings

:set list Try to display invisible chars

:set wm=5 Wrap lines 5 sp from R margin

Command mode:

<- | ->

hljk Cursor movement

G Goto last file line

3G Goto line 3

0 Goto line start

$ Goto line end

% Goto matching brace/paren

H Goto screen top

M Goto screen middle

L Goto screen bottom

w Go forward 1 word

3w Go forward 3 word

b Go back 1 word

3b Go back 3 word

n Repeat previous search

N Reverse previous search

x Delete one character

dw Delete one word

dd Delete one line

D Delete to end of line

d0 Delete to beginning of line

dG Delete to end of file

4dd Delete 4 lines

u Undo last change

. Do last chang

Y Yank a copy of a line

5Y Yank a copy of 5 lines

P Put below cursor

p Put above cursor

J Join next line to current

4J Join 4 lines to current

>> Shift a line right

3>> Shift 3 lines right

^d 1/2 scroll forward

^u 1/2 scroll backwards

^f Scroll forward

^b Scroll backwards

ZZ Write if needed & quit vi

Insert mode:

a Append after cursor

A Append at line end

cw Change a word

3cw Change 3 words

C Change line

i Insert before cursor

5i Insert at 5 times

I Insert at beginning of line

o Open a linebelow cursor

O Open a line above cursor

r Replace one character

R Replace/type-cver a line

s Substitute a character

S Substitue a line

繼續閱讀