vi命令

SDYTXM發表於2014-01-04

在命令狀態下,在某一行上按"J"鍵將Join下一行。

進入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號刪除暫存器中

VI命令格式: 
[命令] (文字) 
[命令] (數字)(文字) 
(數字)[命令] (文字)
基本命令:i a c d y p u x w q o r s
vi [filename] 開啟一個指定檔案
基本文字處理
i 在當前游標前插入文字 
I 在行首插入文字 
a 在當前游標後插入文字 
A 在行尾插入文字 
O 在當前行前插入一行 
o 在當前行後插入一行
x 刪除當前游標字元 
xw 刪除單詞 
x$ 刪除到行尾 
x0 刪除到行首 
5x 刪除5個字元
0 游標移動到當前行第一個字元 
$ 游標移動到當前行最後一個字元 
h 游標左移一個空格 
l 游標右移一個空格 
j 游標下移一行 
k 游標上移一行 
w|W 游標前移一個單詞 
b|B 游標後移一個單詞 
p 貼上 
移動或複製文字可以通過先刪除(dd),然後貼上(p)的方法實現,如dd刪除一行,p貼上改行,x刪除字元,p貼上字元。
c | C 修改文字 
cw 修改單詞,並插入 
c$ 修改到行尾 
c0 修改到行首 
cc 替換當前行
d |D 刪除字元 
dw 刪除單詞 
d$ 刪除到行尾 
dd 刪除當前行
r|R 替換當前文字 
S 替換當前行 
s 替換字元 
~ 字母大小寫轉換
y | Y 複製文字 
yw 複製單詞 
y$ 複製到行尾 
y0 複製到行首 
yy 複製一行 
4yy 複製4行
. 重複操作 
u 撤銷上一次操作 
U 撤銷改行任何操作 
J 合併當前行與下一行 
引數可以帶數字使用,如4h左移4個空格, 50i* 插入50個*
/ | n 向前搜尋 
? | N 向後搜尋 
^F 向前滾一屏 
^B 向後滾一屏 
^D 向前滾半屏 
^U 向後滾半屏 
^L 重新整理螢幕
編輯命令擴充套件
vi + [file] 開啟檔案到最後一行 
vi -r [file] 系統崩潰後恢復檔案 
vi +n [file] 開啟檔案到第n行 
vi +/pattern [file] 開啟檔案到模式首次出現的地方 
vi -R 以只讀模式開啟檔案 
//1-9 前9次刪除操作 
vi編輯器中可以CTRL+Z掛起vi,返回Unix shell狀態,進行其他工作,unix shell中的fg 命令可以使當前工作返回第一個掛起的vi視窗
ex行編輯器
vi中,在ex行命令可以用!呼叫unix系統命令,如!ls, 列出當前目錄的所有檔案,!df 察看當前硬碟使用情況。 
ex命令由行號和命令組成,以Enter鍵結束。 
:1 到第一行 
:1,3 列印1~3行 
:$ 到最後一行 
:shift + G 到最後一行 
:p 恢復緩衝區的內容(如:1p :3p) 
:s/screen/line 替換當前行第一個screen 為 line 
:1,3 s/screen/l 替換1~3行的screen為l 
Q 進入ex編輯命令模式 
vi 返回vi編輯器 
:delete|d 刪除 
:copy |co|t copy 並貼上 copy的內容 
:move [行號]|m move到指定行 
:23,29co100 複製23~29行並把他們貼上到100行的後面 
:set nu 顯示行號 
:= 顯示總行號 
:.= 先是當前行行號
行地址符號 
. 當前行 
$ 最後以行 
% 檔案每一行(1,$) 
+ 向後 
- 向前 
:.+20# 先是從當前行向後20行的行號
:g 全域性搜尋 
:g/pattern 搜尋符合模式的行 
:g!/patterhn 搜尋不符合模式的行
:w 儲存但不退出. 
:w [newfile] 將當前修改儲存到新檔案. 
:wq || ZZ 儲存退出. 
:e 不儲存當前修改,回到初始版本檔案. 
:q 退出不儲存. 
寫檔案並推出編輯器 
:1,10w>> [newfile] 使用>>重定向新增符 和w 把內容追加到檔案 
:read [file] 讀取系統中現有檔案資料 
:r [file] 
:0r [file] 將要讀取的檔案放到當前檔案的開始 
:12r [file] 將要讀取的檔案放到當前檔案的12行後
vi可以開啟多個檔案,通過ex命令在檔案間切換,如vi temp test, 通過:vi temp, :vi test切換到不同檔案,:n命令可以呼叫另一個檔案
:g | :s 全域性替換 
/g 在當前行全域性替換 
:s/old/new/g 當前行全域性替換old字元為new 
:1,$s/old/new/g 全域性替換 
:1,50s/old/new/g 替換1~50行 
:gc 確認替換,y 替換 
n 重複搜尋 
%s/editer/editor/g == :g/editer/s//editor/g 
grep/sed/awk 正則表達 
. 匹配單字元 
* 匹配其前面的單個字元的0個或多個例項:bugs* == bug | bugs 
*. 匹配任何數量的任何字元 
^ 用於正規表示式的開始 

\ 將後面的字元視為普通字元:\* == * 
[] 匹配所包含字元的任何一個:p[aeiout]r == par | per.... 
:g/^$/d 刪除所有空行 
\U 替換字元為大寫 
& 重複替換
Advanced vi command
:set option 設定選項 
:set nooption 關閉選項設定 
:set all 顯示所有選項 
:set ic 指定模式搜尋忽略大小寫 
:set noic 不忽略 
.exrc檔案 控制vi環境的exrc檔案位於主目錄下(首次登陸時所在的目錄),可以用vi編輯器修改.exrc檔案 
:so sourcefile 可以呼叫sourcefile中的選項設定
程式設計選項
:set autoindent 自動縮排 
CTRL+D 取消一個縮排級別(插入模式) 
CRTL+T 實現另一個縮排級別(插入模式) 
>> 行右移(預設8空格--實際上將製表符插入到文字中) 
<< 行左移8空格 
5>> 移動該段落中前5行 
:set shiftwidth=4 該選項可以更改預設縮排的空格數目 
:set tabstop=4 設定tab製表符號的字元數目 
:set list 設定製表符顯示為^I,行尾顯示為$,通常螢幕中製表符和空白均顯示為空白。 
:set showmatch 設定搜尋技巧 
tabstop 
shiftwidth 
number 
list 
autowrite 設定後,呼叫:n(下一個)命令移動到下一個檔案編輯時,:! 執行shell命令之前將自動寫出已修改的緩衝區內容 
:![command] 執行unix命令 
:!date 顯示時間 
:!sort 排序檔案 
:ab 單詞縮寫 
:unab 單詞縮寫失效 
:map 列出當前對映的所有字元 
:map x sequence 對映x為sequence編輯命令 
:unmap x 取消對映
ex特殊鍵: 
^ CTRL+V 
^M 回車 
^[ ESC 
^H Backspace 
^I tab 
"... 雙引號標記ex註釋行,
VIM -- Vi Improved 

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

VI中命令區分大小寫,工作模式分為插入與命令模式,命令模式包括基本命令和ex編輯命令,ex編輯命令一般出現在螢幕下方,由:引出。
VI命令格式: 
[命令] (文字) 
[命令] (數字)(文字) 
(數字)[命令] (文字)
基本命令:i a c d y p u x w q o r s
vi [filename] 開啟一個指定檔案
基本文字處理
i 在當前游標前插入文字 
I 在行首插入文字 
a 在當前游標後插入文字 
A 在行尾插入文字 
O 在當前行前插入一行 
o 在當前行後插入一行
x 刪除當前游標字元 
xw 刪除單詞 
x$ 刪除到行尾 
x0 刪除到行首 
5x 刪除5個字元
0 游標移動到當前行第一個字元 
$ 游標移動到當前行最後一個字元 
h 游標左移一個空格 
l 游標右移一個空格 
j 游標下移一行 
k 游標上移一行 
w|W 游標前移一個單詞 
b|B 游標後移一個單詞 
p 貼上 
移動或複製文字可以通過先刪除(dd),然後貼上(p)的方法實現,如dd刪除一行,p貼上改行,x刪除字元,p貼上字元。
c | C 修改文字 
cw 修改單詞,並插入 
c$ 修改到行尾 
c0 修改到行首 
cc 替換當前行
d |D 刪除字元 
dw 刪除單詞 
d$ 刪除到行尾 
dd 刪除當前行
r|R 替換當前文字 
S 替換當前行 
s 替換字元 
~ 字母大小寫轉換
y | Y 複製文字 
yw 複製單詞 
y$ 複製到行尾 
y0 複製到行首 
yy 複製一行 
4yy 複製4行
. 重複操作 
u 撤銷上一次操作 
U 撤銷改行任何操作 
J 合併當前行與下一行 
引數可以帶數字使用,如4h左移4個空格, 50i* 插入50個*
/ | n 向前搜尋 
? | N 向後搜尋 
^F 向前滾一屏 
^B 向後滾一屏 
^D 向前滾半屏 
^U 向後滾半屏 
^L 重新整理螢幕
編輯命令擴充套件
vi + [file] 開啟檔案到最後一行 
vi -r [file] 系統崩潰後恢復檔案 
vi +n [file] 開啟檔案到第n行 
vi +/pattern [file] 開啟檔案到模式首次出現的地方 
vi -R 以只讀模式開啟檔案 
//1-9 前9次刪除操作 
vi編輯器中可以CTRL+Z掛起vi,返回Unix shell狀態,進行其他工作,unix shell中的fg 命令可以使當前工作返回第一個掛起的vi視窗
ex行編輯器
vi中,在ex行命令可以用!呼叫unix系統命令,如!ls, 列出當前目錄的所有檔案,!df 察看當前硬碟使用情況。 
ex命令由行號和命令組成,以Enter鍵結束。 
:1 到第一行 
:1,3 列印1~3行 
:$ 到最後一行 
:shift + G 到最後一行 
:p 恢復緩衝區的內容(如:1p :3p) 
:s/screen/line 替換當前行第一個screen 為 line 
:1,3 s/screen/l 替換1~3行的screen為l 
Q 進入ex編輯命令模式 
vi 返回vi編輯器 
:delete|d 刪除 
:copy |co|t copy 並貼上 copy的內容 
:move [行號]|m move到指定行 
:23,29co100 複製23~29行並把他們貼上到100行的後面 
:set nu 顯示行號 
:= 顯示總行號 
:.= 先是當前行行號
行地址符號 
. 當前行 
$ 最後以行 
% 檔案每一行(1,$) 
+ 向後 
- 向前 
:.+20# 先是從當前行向後20行的行號
:g 全域性搜尋 
:g/pattern 搜尋符合模式的行 
:g!/patterhn 搜尋不符合模式的行
:w 儲存但不退出. 
:w [newfile] 將當前修改儲存到新檔案. 
:wq || ZZ 儲存退出. 
:e 不儲存當前修改,回到初始版本檔案. 
:q 退出不儲存. 
寫檔案並推出編輯器 
:1,10w>> [newfile] 使用>>重定向新增符 和w 把內容追加到檔案 
:read [file] 讀取系統中現有檔案資料 
:r [file] 
:0r [file] 將要讀取的檔案放到當前檔案的開始 
:12r [file] 將要讀取的檔案放到當前檔案的12行後
vi可以開啟多個檔案,通過ex命令在檔案間切換,如vi temp test, 通過:vi temp, :vi test切換到不同檔案,:n命令可以呼叫另一個檔案
:g | :s 全域性替換 
/g 在當前行全域性替換 
:s/old/new/g 當前行全域性替換old字元為new 
:1,$s/old/new/g 全域性替換 
:1,50s/old/new/g 替換1~50行 
:gc 確認替換,y 替換 
n 重複搜尋 
%s/editer/editor/g == :g/editer/s//editor/g 
grep/sed/awk 正則表達 
. 匹配單字元 
* 匹配其前面的單個字元的0個或多個例項:bugs* == bug | bugs 
*. 匹配任何數量的任何字元 
^ 用於正規表示式的開始 

\ 將後面的字元視為普通字元:\* == * 
[] 匹配所包含字元的任何一個:p[aeiout]r == par | per.... 
:g/^$/d 刪除所有空行 
\U 替換字元為大寫 
& 重複替換
Advanced vi command
:set option 設定選項 
:set nooption 關閉選項設定 
:set all 顯示所有選項 
:set ic 指定模式搜尋忽略大小寫 
:set noic 不忽略 
.exrc檔案 控制vi環境的exrc檔案位於主目錄下(首次登陸時所在的目錄),可以用vi編輯器修改.exrc檔案 
:so sourcefile 可以呼叫sourcefile中的選項設定
程式設計選項
:set autoindent 自動縮排 
CTRL+D 取消一個縮排級別(插入模式) 
CRTL+T 實現另一個縮排級別(插入模式) 
>> 行右移(預設8空格--實際上將製表符插入到文字中) 
<< 行左移8空格 
5>> 移動該段落中前5行 
:set shiftwidth=4 該選項可以更改預設縮排的空格數目 
:set tabstop=4 設定tab製表符號的字元數目 
:set list 設定製表符顯示為^I,行尾顯示為$,通常螢幕中製表符和空白均顯示為空白。 
:set showmatch 設定搜尋技巧 
tabstop 
shiftwidth 
number 
list 
autowrite 設定後,呼叫:n(下一個)命令移動到下一個檔案編輯時,:! 執行shell命令之前將自動寫出已修改的緩衝區內容 
:![command] 執行unix命令 
:!date 顯示時間 
:!sort 排序檔案 
:ab 單詞縮寫 
:unab 單詞縮寫失效 
:map 列出當前對映的所有字元 
:map x sequence 對映x為sequence編輯命令 
:unmap x 取消對映
ex特殊鍵: 
^ CTRL+V 
^M 回車 
^[ ESC 
^H Backspace 
^I tab 
"... 雙引號標記ex註釋行,
VIM -- Vi Improved 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20985606/viewspace-1066995/,如需轉載,請註明出處,否則將追究法律責任。