vi常用操作(vi常用操作命令)
前言
vi 是大多數 UNIX 操作系統都支持的全屏文本編輯器,它具有字處理程序的靈活性和簡單易用的特性。
vi 命令是 UNIX 世界里最常用的編輯文件的命令。
grep 在文件中查找
grep string? /ics/app在/ics/app目錄下查找內容中包含有字符串string的文件
find使用匹配表達式查找文件
find . -name “*.txt” -print在當前目錄及子目錄中查找所有的’* .txt’文件
more 分屏顯示文件內容
more file分屏顯示文件file的內容
1.1?光標移動命令
下述命令適用于命令模式。
k,j,h,l? 上,下,左,右移動光標
nG? n為行數,該命令立即使光標跳到第n行
Ctrl+g? 光標所在位置的行數和列數報告
w,b? 使光標向前或向后跳過一個單詞
0,$? 使光標移動到行首或行尾
e? 將光標移動到字尾
space,backspace 將光標向右或左移動一位
enter? 將光標移動到下一行的行首
1.2?切換模式命令
下述命令使vi從命令模式切換到文本輸入模式,Esc使vi回到命令模式。
i? 從游標所在位置前面開始插入資料,游標后的資料隨新增資料向后移動。
I? 從游標所在列的第一個非空白字元前面開始插入資料。
a? 從游標所在位置后面開始新增資料,游標后的資料隨新增資料向后移動。
A? 從游標所在列最后面的地方開始新增資料。
o? 在游標所在列下新增一列并進入輸入模式。
O? 在游標所在列上方新增一列并進入輸入模式。
本修改命令
下述命令適用于命令模式。
x? 刪除光標所在字符
dd? 刪除光標所在行(ndd 刪除向下n行,包括光標所在行在內)
yy? 復制光標所在行到剪貼板(nyy 復制向下n行,包括光標所在行在內)
p? 粘貼剪貼板中的內容
u? 撤銷最近的修改
U? 撤銷對當前行所作的所有修改
r? 替換光標所在位置的一個字符
R? 替換從光標位置開始的字符,同時改變vi 到文本輸入模式
. 重復上一次的修改
cw,dw,ce? 修改光標所在位置的單詞
2.4?查找命令
下述命令適用于命令模式
/string? 向前搜索string字符串
?string? 向后搜索string字符串
2.5?退出命令
下述命令適用于命令模式。
:w 保存文件,但不退出vi編輯器
:q 退出vi編輯器,但如果修改過文件則不能用該命令退出
:q! 不保存文件,退出vi 編輯器
:wq? 保存文件,退出vi編輯器
:x?? 保存文件,退出vi編輯器,同:wq
ZZ? 保存文件,退出vi編輯器, 同:wq
在命令模式,
按l(小寫L)光標往右移動一個字符,按h光標往左移動一個字符;
按w光標跳到后一個單詞首,按b光標跳到前一個單詞首;
按e光標跳到后一個單詞尾;按$光標跳到行尾,按^光標跳到行首;
以下操作將進入編輯模式:按i在光標所在處開始插入;
按a在光標后一個位置開始插入;按I(大寫i)在行首開始插入;
按A在行尾開始插入;按r替換光標所在處字符,替換后即回到命令模式;按
R從光標位置往后替換,可一直輸入;按x刪除光標位置的字符;
按dw刪除從光標位置至光標所在單詞結尾處的所有字符;按u撤銷上一次編輯;
按dd刪除整行;按Ctrl+c放棄此行。
有些命令可結合數字,如:5h光標往左移動5個字符,3dw刪除從光標位置開始往后的3個單詞。
UNIX下的編輯器有ex,sed和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號刪除寄存器中。
正文
vi的工作模式
vi有兩種的工作模式:命令模式和文本編輯模式
1.命令模式
1) vi初始啟動是進入命令模式。
在命令模式下,鍵的輸入不會在屏幕上顯示,
只會被解釋執行。用戶可以刪除查找,在屏幕上移動光標以及執行一些其他有用的命令。
2)在命令模式下,一些命令以冒號、斜杠和問號開頭
用戶輸入放入命令顯示在vi編輯器的最后一行上;按回車鍵表示結束命令行。
3)文本輸入模式
在文本輸入模式下,vi顯示用戶的輸入。按鍵不被解釋為命令執行;
只作為文本寫入到用戶的文件中
vi的常用操作的命令
光標移動命令
k,j,h,l ?上,下,左,右移動光標
:n ?n為行數,該命令立即使光標跳到第n行
:$ 最后一行
Ctrl+g ?光標所在位置的行數和列數報告
w,b ?使光標向前或向后跳過一個單詞
0,$ ?使光標移動到行首或行尾
e ?將光標移動到字尾
space,backspace 將光標向右或左移動一位
enter ?將光標移動到下一行的行首
Ctrl+f ?向下翻頁
Ctrl+b 向上翻頁
Ctrl+d 向下半頁
Ctrl+u 向上半頁
切換模式命令
i ?從游標所在位置前面開始插入資料,游標后的資料隨新增資料向后移動。
I ?從游標所在列的第一個非空白字元前面開始插入資料。
a ?從游標所在位置后面開始新增資料,游標后的資料隨新增資料向后移動。
A ?從游標所在列最后面的地方開始新增資料。
o ?在游標所在行下新增一行并進入輸入模式。
O ?在游標所在行上方新增一行并進入輸入模式。
文本修改命令
x ?刪除光標所在字符
dd ?刪除光標所在行(ndd 刪除向下n行,包括光標所在行在內)
yy ?復制光標所在行到剪貼板(nyy 復制向下n行,包括光標所在行在內)
p ?粘貼剪貼板中的內容
u ?撤銷最近的修改
U ?撤銷對當前行所作的所有修改
r,s ?替換光標所在位置的一個字符
R ?替換從光標位置開始的字符,同時改變vi 到文本輸入模式
. 重復上一次的修改
cw,dw,ce ?修改光標所在位置的單詞
查找命令
/string ?向前搜索string字符串
?string ?向后搜索string字符串
退出命令
:w 保存文件,但不退出vi編輯器
:q 退出vi編輯器,但如果修改過文件則不能用該命令退出
:q! 不保存文件,退出vi 編輯器
:wq ?保存文件,退出vi編輯器
:x ? 保存文件,退出vi編輯器,同:wq
ZZ ?保存文件,退出vi編輯器, 同:wq
替換字符串
: %s/aaaa/bbbb/g ?將所有行的aaaa替換為bbbb
: 2,10s/aaaa/bbbb/g 將第2行到第10行的aaaa替換為bbbb
例子:替換文件中的dos換行符
:%s/^M/ /g
注:其中,使用 ctrl+v+m來打出^M字符。
總結
1.1?光標移動命令
下述命令適用于命令模式。
k,j,h,l? 上,下,左,右移動光標
nG? n為行數,該命令立即使光標跳到第n行
Ctrl+g? 光標所在位置的行數和列數報告
w,b? 使光標向前或向后跳過一個單詞
0,$? 使光標移動到行首或行尾
e? 將光標移動到字尾
space,backspace 將光標向右或左移動一位
enter? 將光標移動到下一行的行首
1.2?切換模式命令
下述命令使vi從命令模式切換到文本輸入模式,Esc使vi回到命令模式。
i? 從游標所在位置前面開始插入資料,游標后的資料隨新增資料向后移動。
I? 從游標所在列的第一個非空白字元前面開始插入資料。
a? 從游標所在位置后面開始新增資料,游標后的資料隨新增資料向后移動。
A? 從游標所在列最后面的地方開始新增資料。
o? 在游標所在列下新增一列并進入輸入模式。
O? 在游標所在列上方新增一列并進入輸入模式。
本修改命令
下述命令適用于命令模式。
x? 刪除光標所在字符
dd? 刪除光標所在行(ndd 刪除向下n行,包括光標所在行在內)
yy? 復制光標所在行到剪貼板(nyy 復制向下n行,包括光標所在行在內)
p? 粘貼剪貼板中的內容
u? 撤銷最近的修改
U? 撤銷對當前行所作的所有修改
r? 替換光標所在位置的一個字符
R? 替換從光標位置開始的字符,同時改變vi 到文本輸入模式
. 重復上一次的修改
cw,dw,ce? 修改光標所在位置的單詞
2.4?查找命令
下述命令適用于命令模式
/string? 向前搜索string字符串
?string? 向后搜索string字符串
2.5?退出命令
下述命令適用于命令模式。
:w 保存文件,但不退出vi編輯器
:q 退出vi編輯器,但如果修改過文件則不能用該命令退出
:q! 不保存文件,退出vi 編輯器
:wq? 保存文件,退出vi編輯器
:x?? 保存文件,退出vi編輯器,同:wq
ZZ? 保存文件,退出vi編輯器, 同:wq
在命令模式,
按l(小寫L)光標往右移動一個字符,按h光標往左移動一個字符;
按w光標跳到后一個單詞首,按b光標跳到前一個單詞首;
按e光標跳到后一個單詞尾;按$光標跳到行尾,按^光標跳到行首;
以下操作將進入編輯模式:按i在光標所在處開始插入;
按a在光標后一個位置開始插入;按I(大寫i)在行首開始插入;
按A在行尾開始插入;按r替換光標所在處字符,替換后即回到命令模式;按
R從光標位置往后替換,可一直輸入;按x刪除光標位置的字符;
按dw刪除從光標位置至光標所在單詞結尾處的所有字符;按u撤銷上一次編輯;
按dd刪除整行;按Ctrl+c放棄此行。
有些命令可結合數字,如:5h光標往左移動5個字符,3dw刪除從光標位置開始往后的3個單詞。
UNIX下的編輯器有ex,sed和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號刪除寄存器中。
游標移動 重要度 指令集 功能
h
向左移動一個字元
l
向右移動一個字元
j
向下移動一個字元
k
向上移動一個字元
b
左移一個單詞,至詞首
w
右移一個單詞,至詞尾
0
移到當前行行首
$
移到當前行行尾
+
移至下一行的行首
-
移至上一行的行首
H
移至視窗的第一行
M
移至視窗的中間一行
L
移至視窗的最后一行
G
移至該文件的最后一行
nG
移至該文檔的第n行
n+
下移n行
n-
上移n行
注意:
切換到shell狀態 重要度 指令集 功能
:sh
切換到shell狀態,exit返回
2.最后一行可用“$”代替。 重要度 指令集 功能
:10,20d
刪除第10行至第20行的內容
:10d
刪除第10行的內容
:%d
刪除全部內容
:10,20co30
將第10行至第20行的內容復制到第30行之后
:10,20mo30
將第10行至第20行的內容移動到第30行之后
:1,$s/old/new
將第1行至最后一行中的old替換成new
:1,$s/^/new
將第1行至最后一行的內容前面插入new
:10
將游標移至第10行
總結
find使用匹配表達式查找文件
find . –name “文件前綴*”|xargs grep –l關鍵字[|xargs ls –ltr|tail]
find在當前目錄下(通過.指定,包括子目錄)根據文件名(name)查找以該文件前綴開頭的所有日志;
find查詢的結果,通過管道符|傳給后面的命令,xargs將管道傳過來的數據分批以參數列表的形式傳給緊隨其后的命令grep(參數列表被放在命令結束位置,以此為例說明,假設find命令找到2個文件CL11P11G11P11U1B1_R1E1G.trc和CL1111PG11P11U1B2_R1E1G.trc,那么參數列表就是以空格分隔的這些文件名:CL11P11G11P11U1B1_REG.trc CL1111PG11P11U1B2_REG.trc,這里相當于執行:grep –l 關鍵字 CL11P11G11P11U1B1_REG.trc CL1111PG11P11U1B2_REG.trc),而參數列表在grep命令中的這個位置是文件名,所以grep將從參數列表中所示的所有文件中查詢指定的關鍵字,-l選項表示只列出文件內容中包含關鍵字的文件名;
當查詢到的日志文件比較多,且確定要找的交易剛做不久,可繼續使用管道符|,通過后面的命令做進一步處理;
xargs ls –ltr(相當于執行:ls –ltr 參數列表)表示對參數列表中所示的文件按時間(t)進行倒序(r)排列并顯示每個文件的詳細信息(l)。
Unix
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。