from:http://www.2to2.cn/article_view.asp?id=285
從shell中啟動(dòng)可視化編輯器
vi filename 指示shell啟動(dòng)vi編輯器,并將參數(shù)filename傳給它。如果當(dāng)前目前中存在該文件,則vi編輯器將它解釋為要打開的文件;如果沒有該文件,則vi編譯器創(chuàng)建新文件
vi file1 file2 file3 shell傳遞3個(gè)參數(shù)給vi,vi將它們解釋為要打開的文件。可以使用:w命令保存文件,使用:n命令訪問下一個(gè)文件
vi +# filename 打開文件,并將光標(biāo)移到指定的行。例如,命令vi +100 records 從第100行開始編輯文件records
vi +/the filename 打開文件,并將光標(biāo)移動(dòng)包含有目標(biāo)字符串的行。例如,命令vi +/Jason friends 從第1個(gè)含有字符串Jason的行開始編輯文件friends
view filename 打開文件進(jìn)行編輯,但是拒絕保存對(duì)文件的修改,除非使用w!命令
光標(biāo)移動(dòng)命令
hjkl 將光標(biāo)分別向左、下、上、右移動(dòng)一個(gè)字符
0(零) 將光標(biāo)移到當(dāng)前行的行首
^(脫字符) 同0一樣將光標(biāo)移到當(dāng)前行的行首
$ 將光標(biāo)移到當(dāng)前行的行末
##G 將光標(biāo)移到G前面的數(shù)字指定的行。例如,42G將光標(biāo)移到文件的第42行
G 將光標(biāo)移到文件的最后一行
w 將光標(biāo)向前移到下一個(gè)單詞的首字母
e 將光標(biāo)向前移到下一個(gè)單詞的最后一個(gè)字母
b 將光標(biāo)向后移到上一個(gè)單詞首字母
- 將光標(biāo)定位到上一行的行首
+ 將光標(biāo)定位到下一行的行首
12| 將光標(biāo)定位到當(dāng)前行的第12列
L 將光標(biāo)定位到屏幕的最下面一行
M 將光標(biāo)定位到屏幕中間的一行
H 將光標(biāo)定位到屏幕的最上面一行
'' 兩個(gè)單引號(hào)將光標(biāo)移到它的先前的位置
光標(biāo)定位命令(上下文的)
fb 將光標(biāo)向前移到當(dāng)前行上的下一個(gè)字母b(或者其他的任意指定的字符)
Fb 將光標(biāo)向后移到當(dāng)前行上的上一個(gè)字母b(或指定的字符)
t# 將光標(biāo)移到當(dāng)前行上字符#的第1個(gè)實(shí)例的右側(cè)。例如,命令tM將光標(biāo)移到當(dāng)前行上第1個(gè)M的右側(cè)
T# 在當(dāng)前行上向左移動(dòng)光標(biāo),將它移到字符#的第1個(gè)實(shí)例的前一字符
/word 將光標(biāo)向前移到單詞word的下一個(gè)實(shí)例
?word 將光標(biāo)向后移到單詞word的上一個(gè)實(shí)例
n 將光標(biāo)移到前面命令/word或?word中指定模式的下一個(gè)實(shí)例
顯示調(diào)整命令
Ctrl+D 顯示文件中的下半屏文本
Ctrl+U 顯示文件中的上半屏文本
Ctrl+F 顯示文件中的下一屏文本
Ctrl+B 顯示文件中的上一屏文本
設(shè)置顯示選項(xiàng)
:set number 將行號(hào)作為屏幕顯示的一部分,但是行號(hào)并不是文件的一部分。它的縮寫形式為:set nu
:set nonumber 清除屏幕上的行號(hào)。也可以使用縮寫形式:set nonu
:set showmode 在屏幕的右下角顯示追加模式信息
:set list 在每行的行末顯示美元符號(hào),并用Ctrl+I表示制表符
:set showmatch 在輸入)或]時(shí),將光標(biāo)移到與之匹配的(或[
:set window=value 定義屏幕上顯示的文本行的行數(shù)
:set autoindent 自動(dòng)縮進(jìn)。也可以使用縮寫形式:set ai
:set tabstop=value 設(shè)置顯示制表符的空格字符個(gè)數(shù)。也可以使用縮寫形式ts=value
:set wrapmargin=value 設(shè)置顯示器的右頁(yè)邊。當(dāng)輸入進(jìn)入所設(shè)置的頁(yè)邊時(shí),編輯器自動(dòng)回車換行
:set ignorecase 指示編輯器搜索字符串,并忽略目標(biāo)中字母的大小寫
:set 顯示設(shè)置的所有選項(xiàng)
:set all 顯示所有可以設(shè)置的選項(xiàng)
文本刪除命令
dd 刪除當(dāng)前光標(biāo)所有的文本行
#dd 刪除#行文本
dw 從文本中刪除一個(gè)單詞
#dw 從文本中刪除#個(gè)單詞
x 刪除光標(biāo)所在的一個(gè)字符
#x 從文本中刪除#個(gè)字符
D 刪除當(dāng)前行上光標(biāo)后面的部分
:#,#d 例如,:12,37d 將刪除第12~37行之間的所有文本,包括第12和37行
撤銷命令
u 撤銷。恢復(fù)最近一次的文本修改操作,即使已經(jīng)移動(dòng)了光標(biāo)。在Linux系統(tǒng)中,再次使用撤銷命令將恢復(fù)更前一次的文本修改操作。在BSD的vi中,第2次撤銷操作將撤銷第一次撤銷操作,恢復(fù)第1次撤銷前修改的文本
:redo 在Linux系統(tǒng)中,取消撤銷操作恢復(fù)文本修改。在標(biāo)準(zhǔn)的UNIX系統(tǒng)中,第2個(gè)u命令取消第1個(gè)u命令,結(jié)果就是一個(gè)“redo”
U 如果在修改后還沒有將光標(biāo)移出當(dāng)前行,則可以撤銷對(duì)當(dāng)前行進(jìn)行的所有的文本修改
向文本中添加文本
a(小寫) 從光標(biāo)的右側(cè)開始插入文本
A(大寫) 從當(dāng)前行的行末開始添加文本
i(小寫) 從光標(biāo)的左側(cè)開始插入文本
I(大寫) 從當(dāng)前行的行首插入文本
o(小寫) 在光標(biāo)的下面打開(或插入)一個(gè)新行
O(大寫) 在光標(biāo)的上面打開一個(gè)新行
:#r filename 例如,:8r report.old讀取文件report.old,并將它的內(nèi)容放到當(dāng)前文件的第8行之后
Esc 無(wú)論使用什么命令進(jìn)入了追加/插入模式,都可以通過按Esc鍵離開追加模式返回到vi的命令模式
Ctrl+V 允許輸入控制字符。按Ctrl+V鍵后再按回車鍵將把Ctrl+M插入到文件中
在文件中修改文本
cw 僅僅修改光標(biāo)處的單詞(刪除單詞,然后進(jìn)入追加模式中,以在被刪除單詞的位置添加文本)
s(小寫) 替換單個(gè)字符
S(大寫) 替換整行文本
cc 替換整行文本(同S)
r 用輸入的下一個(gè)字符替代當(dāng)前光標(biāo)處的字符,并自動(dòng)返回到命令模式
R 將編輯器放到覆蓋模式,用輸入的字符來(lái)逐個(gè)替換光標(biāo)處的字符
C(大寫) 修改行上從光標(biāo)到行末之間的文本
ct# 修改行上從光標(biāo)到前向第1個(gè)目標(biāo)字符之間的文本。例如ctY將刪除當(dāng)前行上從光標(biāo)到向前第1個(gè)字符Y之間的所有文本,并進(jìn)入追加模式以在刪除文本的位置添加文本
cf# 修改行上從光標(biāo)到前向第1個(gè)目標(biāo)字符之間的文本(包括目標(biāo)字符)。例如cfY將刪除當(dāng)前行上從光標(biāo)到向前第1個(gè)字符Y之間(包括Y)的所有文本,并進(jìn)入追加模式以在刪除文本的位置添加文本
cT# 修改行上從光標(biāo)到后向第1個(gè)目標(biāo)字符之間的文本。例如cTY將刪除當(dāng)前行上從光標(biāo)到向后第1個(gè)字符Y之間的所有文本,并進(jìn)入追加模式以在刪除文本的位置添加文本
cF# 修改行上從光標(biāo)到后向第1個(gè)目標(biāo)字符之間的文本(包括目標(biāo)字符)。例如cFY將刪除當(dāng)前行上從光標(biāo)到向后第1個(gè)字符Y之間(包括Y)的所有文本,并進(jìn)入追加模式以在刪除文本的位置添加文本
接出和粘貼行的單詞
yy 將當(dāng)前行復(fù)制或接出到內(nèi)在緩沖區(qū)。20yy將當(dāng)前行和它后面的19行(共20行)文本復(fù)制到內(nèi)存。目標(biāo)行仍然保留在文件中,可以使用p命令將這些內(nèi)存中的文本粘貼到文件中
dd 刪除當(dāng)前行,并將它放到與yy命令使用的相同的內(nèi)存緩沖區(qū)。目標(biāo)行從文件中刪除,但是可以使用p命令將它粘貼到文件中的其他地方
yw 將當(dāng)前光標(biāo)所在的單詞接出或復(fù)制到內(nèi)在緩沖區(qū)。6yw命令將把當(dāng)前單詞和它后面的5個(gè)(共6個(gè))單詞復(fù)制到內(nèi)存
dw 刪除當(dāng)前的單詞,并將它放到與yw命令使用的相同的內(nèi)存緩沖區(qū)。可以使用p命令將單詞粘貼到文件的其他地方
yt# 接出從光標(biāo)到向前一個(gè)字符(不包括該字符)之間的文本。例如,ytB命令將從光標(biāo)到字符B的下一實(shí)例(不包括字符B)之間的文本接出或復(fù)制到內(nèi)存
yf# 接出從光標(biāo)到向前一個(gè)字符(包括該字符)之間的文本。例如,yf:命令將從光標(biāo)到字符:的下一個(gè)實(shí)例(包括字符:)之間的文本接出或復(fù)制到內(nèi)存
yT# 后向接出(不包括目標(biāo)字符)。例如,yTN命令將從光標(biāo)到字符N的后向第1個(gè)實(shí)例之間的文本(不包括字符N)接出或復(fù)制到內(nèi)存
yF# 后向接出(包括目標(biāo)字符)。例如,yFJ命令將把從光標(biāo)到字符N的向后第1個(gè)實(shí)例之間的文本(包括字符N)接出或復(fù)制到內(nèi)存
p 將內(nèi)存中的文本行粘貼到文件中光標(biāo)所在行的下面,或?qū)?nèi)存中的單詞粘貼到文件中光標(biāo)的右側(cè)
P(大寫) 將接出或刪除的文本行粘貼到文件中光標(biāo)所在行的上面。或?qū)⒔映龌騽h除的單詞粘貼到文件中光標(biāo)的左側(cè)
文件移動(dòng)命令
J 將下行文本同當(dāng)前行合并成一行
:#,# move # 將指定的行移到目標(biāo)位置。:12,35 move 58命令將第12~35行之間的所有文本移到第58行的后面。縮寫為mo
:1,26 co 82 將第1~26行之間的所有文本復(fù)制到第82行的后面(可以選擇行號(hào))
使用可視化編輯器進(jìn)行全局編輯
:s /target/replacement/ 查找當(dāng)前行上目標(biāo)字符串的第1個(gè)實(shí)例并刪除,然后用字符串replacement替換。只修改當(dāng)前行上的第1個(gè)目標(biāo)實(shí)例
:g /target/s//replacement/ 查找所有行上目標(biāo)字符串的第1個(gè)實(shí)例并刪除,然后用字符串replacement替換。修改所有行上目標(biāo)的第1個(gè)實(shí)例
:#,# s/target/replacement/ 在指定的行上進(jìn)行替換。例如,:7,37 s/march/walk/將查找第7~37行之間的所有文本行,并用字符串walk替換每行中的第1個(gè)目標(biāo)字符串march。所有指定行上的第1個(gè)目標(biāo)字符串修改
:#,# s/target/replacement/g 在指定的行上進(jìn)行全局替換。例如,:1,$ s/fun/joyful/g 將在第1行到文件最后一行之間查找目標(biāo)字符串fun的所有實(shí)例并刪除,然后用字符串joyful替換。指定行上的目標(biāo)字符串的所有實(shí)例都被修改
:g /target/s/replacement 查找所有行上目標(biāo)字符串的第1個(gè)實(shí)例并刪除,然后用字符串replacement替換。所有行上的第1個(gè)目標(biāo)都被修改
:#,# target/s/replacement/ 在指定的行上進(jìn)行替換,例如,:7,37 march/s/walk命令在第7~37行之間每個(gè)文本行上查找目標(biāo)字符串的第1個(gè)實(shí)例并刪除,然后用字符串walk替換。所有指定行上的第1個(gè)目標(biāo)字符串都被修改
:#,# target/s/replacement/g 在指定的行上進(jìn)行全局替換。例如,:1,$ fun/s/joyful/g將在第1行到文件最后一行之間查找目標(biāo)字符串fun的所有實(shí)例并刪除,然后用字符串joyful替換。指定行上的所有目標(biāo)字符串都被修改
編輯工具:映射,縮寫和標(biāo)記
m# 用字母標(biāo)記當(dāng)前行。例如,ma命令表示用a標(biāo)記當(dāng)前行。即使移動(dòng)了標(biāo)記行,它仍然標(biāo)記為a,可以用a來(lái)定位該行
'# 定位標(biāo)記行。例如,命令'a將光標(biāo)移到標(biāo)記a的行。命令'a,$d將刪除從標(biāo)記行到文件末尾之間的所有行
:map # command string 在命令模式中輸入#時(shí),將其作為一個(gè)命令串。例如,:map #o#!/bin/ksh產(chǎn)生一個(gè)新的命令模式指令,您輸入#時(shí),它被解釋為:o打開個(gè)新行,并添加文本#!/bin/ksh到文件中。為了在命令中包含回車和其他控制字符,可以在它們的前面用Ctrl+V命令
:ab abbreviation char-string 設(shè)置追加模式縮寫。例如,在命令模式中輸入:ab mv Milky Way Galaxy,則建立縮寫。如果在追加模式中輸入字符串mw,然后按Esc鍵,mw將被Milky Way Galaxy替代
在vi編輯器中向shell發(fā)出命令
:!ls 啟動(dòng)一個(gè)shell,并讓shell運(yùn)行l(wèi)s程序。在運(yùn)行完指定的程序后,必須按回車鍵以返回到編輯器中
:!ksh 啟動(dòng)一個(gè)shell,它允許運(yùn)行多個(gè)命令。退出shell可以回到編譯器中
:Or!speel% 對(duì)當(dāng)前文件(%)進(jìn)行拼寫檢查,并將spell的輸出詩(shī)篇到當(dāng)前文件中,從第1行(0行后面)開始放置這些輸出
:31r!command% 運(yùn)行UNIX命令(如cal或date)并將它的輸出讀入到當(dāng)前文件,從第31行開始放置這些輸出
Ctrl+Z 用于掛起當(dāng)前編輯會(huì)話進(jìn)程的csh和ksh命令,它允許您向父shell發(fā)出命令
fg 重新激活掛起的編輯進(jìn)程的csh和ksh命令
讀、寫和退出編輯器
:wq 保存編輯會(huì)話期間對(duì)文件所做的修改,退出編輯器返回到shell
:q 如果沒有對(duì)文件進(jìn)行修改或添加文件,可以用q退出對(duì)一個(gè)文件的編輯
:q! 退出對(duì)文件的編輯返回到shell模式,但是不保存在編輯會(huì)話期間對(duì)文件所做的修改
:w filename v將文件的緩沖區(qū)副本(修改版本)保存到一個(gè)新文件
[color=#DC143C][b]:#,# w newtest 例如,:1,6 w newtext命令創(chuàng)建一個(gè)名為newtext的文件,并將當(dāng)前文件的第1~6行文本復(fù)制到文件newtext中
:1,6 w >> oldfile 將當(dāng)前文件的第1~6行文本的一個(gè)副本追加到已有文件oldfile的末尾
:1,6 w! oldfile 用當(dāng)前文件的第1~6行文本覆蓋文件oldfile
從shell中啟動(dòng)可視化編輯器
vi filename 指示shell啟動(dòng)vi編輯器,并將參數(shù)filename傳給它。如果當(dāng)前目前中存在該文件,則vi編輯器將它解釋為要打開的文件;如果沒有該文件,則vi編譯器創(chuàng)建新文件
vi file1 file2 file3 shell傳遞3個(gè)參數(shù)給vi,vi將它們解釋為要打開的文件。可以使用:w命令保存文件,使用:n命令訪問下一個(gè)文件
vi +# filename 打開文件,并將光標(biāo)移到指定的行。例如,命令vi +100 records 從第100行開始編輯文件records
vi +/the filename 打開文件,并將光標(biāo)移動(dòng)包含有目標(biāo)字符串的行。例如,命令vi +/Jason friends 從第1個(gè)含有字符串Jason的行開始編輯文件friends
view filename 打開文件進(jìn)行編輯,但是拒絕保存對(duì)文件的修改,除非使用w!命令
光標(biāo)移動(dòng)命令
hjkl 將光標(biāo)分別向左、下、上、右移動(dòng)一個(gè)字符
0(零) 將光標(biāo)移到當(dāng)前行的行首
^(脫字符) 同0一樣將光標(biāo)移到當(dāng)前行的行首
$ 將光標(biāo)移到當(dāng)前行的行末
##G 將光標(biāo)移到G前面的數(shù)字指定的行。例如,42G將光標(biāo)移到文件的第42行
G 將光標(biāo)移到文件的最后一行
w 將光標(biāo)向前移到下一個(gè)單詞的首字母
e 將光標(biāo)向前移到下一個(gè)單詞的最后一個(gè)字母
b 將光標(biāo)向后移到上一個(gè)單詞首字母
- 將光標(biāo)定位到上一行的行首
+ 將光標(biāo)定位到下一行的行首
12| 將光標(biāo)定位到當(dāng)前行的第12列
L 將光標(biāo)定位到屏幕的最下面一行
M 將光標(biāo)定位到屏幕中間的一行
H 將光標(biāo)定位到屏幕的最上面一行
'' 兩個(gè)單引號(hào)將光標(biāo)移到它的先前的位置
光標(biāo)定位命令(上下文的)
fb 將光標(biāo)向前移到當(dāng)前行上的下一個(gè)字母b(或者其他的任意指定的字符)
Fb 將光標(biāo)向后移到當(dāng)前行上的上一個(gè)字母b(或指定的字符)
t# 將光標(biāo)移到當(dāng)前行上字符#的第1個(gè)實(shí)例的右側(cè)。例如,命令tM將光標(biāo)移到當(dāng)前行上第1個(gè)M的右側(cè)
T# 在當(dāng)前行上向左移動(dòng)光標(biāo),將它移到字符#的第1個(gè)實(shí)例的前一字符
/word 將光標(biāo)向前移到單詞word的下一個(gè)實(shí)例
?word 將光標(biāo)向后移到單詞word的上一個(gè)實(shí)例
n 將光標(biāo)移到前面命令/word或?word中指定模式的下一個(gè)實(shí)例
顯示調(diào)整命令
Ctrl+D 顯示文件中的下半屏文本
Ctrl+U 顯示文件中的上半屏文本
Ctrl+F 顯示文件中的下一屏文本
Ctrl+B 顯示文件中的上一屏文本
設(shè)置顯示選項(xiàng)
:set number 將行號(hào)作為屏幕顯示的一部分,但是行號(hào)并不是文件的一部分。它的縮寫形式為:set nu
:set nonumber 清除屏幕上的行號(hào)。也可以使用縮寫形式:set nonu
:set showmode 在屏幕的右下角顯示追加模式信息
:set list 在每行的行末顯示美元符號(hào),并用Ctrl+I表示制表符
:set showmatch 在輸入)或]時(shí),將光標(biāo)移到與之匹配的(或[
:set window=value 定義屏幕上顯示的文本行的行數(shù)
:set autoindent 自動(dòng)縮進(jìn)。也可以使用縮寫形式:set ai
:set tabstop=value 設(shè)置顯示制表符的空格字符個(gè)數(shù)。也可以使用縮寫形式ts=value
:set wrapmargin=value 設(shè)置顯示器的右頁(yè)邊。當(dāng)輸入進(jìn)入所設(shè)置的頁(yè)邊時(shí),編輯器自動(dòng)回車換行
:set ignorecase 指示編輯器搜索字符串,并忽略目標(biāo)中字母的大小寫
:set 顯示設(shè)置的所有選項(xiàng)
:set all 顯示所有可以設(shè)置的選項(xiàng)
文本刪除命令
dd 刪除當(dāng)前光標(biāo)所有的文本行
#dd 刪除#行文本
dw 從文本中刪除一個(gè)單詞
#dw 從文本中刪除#個(gè)單詞
x 刪除光標(biāo)所在的一個(gè)字符
#x 從文本中刪除#個(gè)字符
D 刪除當(dāng)前行上光標(biāo)后面的部分
:#,#d 例如,:12,37d 將刪除第12~37行之間的所有文本,包括第12和37行
撤銷命令
u 撤銷。恢復(fù)最近一次的文本修改操作,即使已經(jīng)移動(dòng)了光標(biāo)。在Linux系統(tǒng)中,再次使用撤銷命令將恢復(fù)更前一次的文本修改操作。在BSD的vi中,第2次撤銷操作將撤銷第一次撤銷操作,恢復(fù)第1次撤銷前修改的文本
:redo 在Linux系統(tǒng)中,取消撤銷操作恢復(fù)文本修改。在標(biāo)準(zhǔn)的UNIX系統(tǒng)中,第2個(gè)u命令取消第1個(gè)u命令,結(jié)果就是一個(gè)“redo”
U 如果在修改后還沒有將光標(biāo)移出當(dāng)前行,則可以撤銷對(duì)當(dāng)前行進(jìn)行的所有的文本修改
向文本中添加文本
a(小寫) 從光標(biāo)的右側(cè)開始插入文本
A(大寫) 從當(dāng)前行的行末開始添加文本
i(小寫) 從光標(biāo)的左側(cè)開始插入文本
I(大寫) 從當(dāng)前行的行首插入文本
o(小寫) 在光標(biāo)的下面打開(或插入)一個(gè)新行
O(大寫) 在光標(biāo)的上面打開一個(gè)新行
:#r filename 例如,:8r report.old讀取文件report.old,并將它的內(nèi)容放到當(dāng)前文件的第8行之后
Esc 無(wú)論使用什么命令進(jìn)入了追加/插入模式,都可以通過按Esc鍵離開追加模式返回到vi的命令模式
Ctrl+V 允許輸入控制字符。按Ctrl+V鍵后再按回車鍵將把Ctrl+M插入到文件中
在文件中修改文本
cw 僅僅修改光標(biāo)處的單詞(刪除單詞,然后進(jìn)入追加模式中,以在被刪除單詞的位置添加文本)
s(小寫) 替換單個(gè)字符
S(大寫) 替換整行文本
cc 替換整行文本(同S)
r 用輸入的下一個(gè)字符替代當(dāng)前光標(biāo)處的字符,并自動(dòng)返回到命令模式
R 將編輯器放到覆蓋模式,用輸入的字符來(lái)逐個(gè)替換光標(biāo)處的字符
C(大寫) 修改行上從光標(biāo)到行末之間的文本
ct# 修改行上從光標(biāo)到前向第1個(gè)目標(biāo)字符之間的文本。例如ctY將刪除當(dāng)前行上從光標(biāo)到向前第1個(gè)字符Y之間的所有文本,并進(jìn)入追加模式以在刪除文本的位置添加文本
cf# 修改行上從光標(biāo)到前向第1個(gè)目標(biāo)字符之間的文本(包括目標(biāo)字符)。例如cfY將刪除當(dāng)前行上從光標(biāo)到向前第1個(gè)字符Y之間(包括Y)的所有文本,并進(jìn)入追加模式以在刪除文本的位置添加文本
cT# 修改行上從光標(biāo)到后向第1個(gè)目標(biāo)字符之間的文本。例如cTY將刪除當(dāng)前行上從光標(biāo)到向后第1個(gè)字符Y之間的所有文本,并進(jìn)入追加模式以在刪除文本的位置添加文本
cF# 修改行上從光標(biāo)到后向第1個(gè)目標(biāo)字符之間的文本(包括目標(biāo)字符)。例如cFY將刪除當(dāng)前行上從光標(biāo)到向后第1個(gè)字符Y之間(包括Y)的所有文本,并進(jìn)入追加模式以在刪除文本的位置添加文本
接出和粘貼行的單詞
yy 將當(dāng)前行復(fù)制或接出到內(nèi)在緩沖區(qū)。20yy將當(dāng)前行和它后面的19行(共20行)文本復(fù)制到內(nèi)存。目標(biāo)行仍然保留在文件中,可以使用p命令將這些內(nèi)存中的文本粘貼到文件中
dd 刪除當(dāng)前行,并將它放到與yy命令使用的相同的內(nèi)存緩沖區(qū)。目標(biāo)行從文件中刪除,但是可以使用p命令將它粘貼到文件中的其他地方
yw 將當(dāng)前光標(biāo)所在的單詞接出或復(fù)制到內(nèi)在緩沖區(qū)。6yw命令將把當(dāng)前單詞和它后面的5個(gè)(共6個(gè))單詞復(fù)制到內(nèi)存
dw 刪除當(dāng)前的單詞,并將它放到與yw命令使用的相同的內(nèi)存緩沖區(qū)。可以使用p命令將單詞粘貼到文件的其他地方
yt# 接出從光標(biāo)到向前一個(gè)字符(不包括該字符)之間的文本。例如,ytB命令將從光標(biāo)到字符B的下一實(shí)例(不包括字符B)之間的文本接出或復(fù)制到內(nèi)存
yf# 接出從光標(biāo)到向前一個(gè)字符(包括該字符)之間的文本。例如,yf:命令將從光標(biāo)到字符:的下一個(gè)實(shí)例(包括字符:)之間的文本接出或復(fù)制到內(nèi)存
yT# 后向接出(不包括目標(biāo)字符)。例如,yTN命令將從光標(biāo)到字符N的后向第1個(gè)實(shí)例之間的文本(不包括字符N)接出或復(fù)制到內(nèi)存
yF# 后向接出(包括目標(biāo)字符)。例如,yFJ命令將把從光標(biāo)到字符N的向后第1個(gè)實(shí)例之間的文本(包括字符N)接出或復(fù)制到內(nèi)存
p 將內(nèi)存中的文本行粘貼到文件中光標(biāo)所在行的下面,或?qū)?nèi)存中的單詞粘貼到文件中光標(biāo)的右側(cè)
P(大寫) 將接出或刪除的文本行粘貼到文件中光標(biāo)所在行的上面。或?qū)⒔映龌騽h除的單詞粘貼到文件中光標(biāo)的左側(cè)
文件移動(dòng)命令
J 將下行文本同當(dāng)前行合并成一行
:#,# move # 將指定的行移到目標(biāo)位置。:12,35 move 58命令將第12~35行之間的所有文本移到第58行的后面。縮寫為mo
:1,26 co 82 將第1~26行之間的所有文本復(fù)制到第82行的后面(可以選擇行號(hào))
使用可視化編輯器進(jìn)行全局編輯
:s /target/replacement/ 查找當(dāng)前行上目標(biāo)字符串的第1個(gè)實(shí)例并刪除,然后用字符串replacement替換。只修改當(dāng)前行上的第1個(gè)目標(biāo)實(shí)例
:g /target/s//replacement/ 查找所有行上目標(biāo)字符串的第1個(gè)實(shí)例并刪除,然后用字符串replacement替換。修改所有行上目標(biāo)的第1個(gè)實(shí)例
:#,# s/target/replacement/ 在指定的行上進(jìn)行替換。例如,:7,37 s/march/walk/將查找第7~37行之間的所有文本行,并用字符串walk替換每行中的第1個(gè)目標(biāo)字符串march。所有指定行上的第1個(gè)目標(biāo)字符串修改
:#,# s/target/replacement/g 在指定的行上進(jìn)行全局替換。例如,:1,$ s/fun/joyful/g 將在第1行到文件最后一行之間查找目標(biāo)字符串fun的所有實(shí)例并刪除,然后用字符串joyful替換。指定行上的目標(biāo)字符串的所有實(shí)例都被修改
:g /target/s/replacement 查找所有行上目標(biāo)字符串的第1個(gè)實(shí)例并刪除,然后用字符串replacement替換。所有行上的第1個(gè)目標(biāo)都被修改
:#,# target/s/replacement/ 在指定的行上進(jìn)行替換,例如,:7,37 march/s/walk命令在第7~37行之間每個(gè)文本行上查找目標(biāo)字符串的第1個(gè)實(shí)例并刪除,然后用字符串walk替換。所有指定行上的第1個(gè)目標(biāo)字符串都被修改
:#,# target/s/replacement/g 在指定的行上進(jìn)行全局替換。例如,:1,$ fun/s/joyful/g將在第1行到文件最后一行之間查找目標(biāo)字符串fun的所有實(shí)例并刪除,然后用字符串joyful替換。指定行上的所有目標(biāo)字符串都被修改
編輯工具:映射,縮寫和標(biāo)記
m# 用字母標(biāo)記當(dāng)前行。例如,ma命令表示用a標(biāo)記當(dāng)前行。即使移動(dòng)了標(biāo)記行,它仍然標(biāo)記為a,可以用a來(lái)定位該行
'# 定位標(biāo)記行。例如,命令'a將光標(biāo)移到標(biāo)記a的行。命令'a,$d將刪除從標(biāo)記行到文件末尾之間的所有行
:map # command string 在命令模式中輸入#時(shí),將其作為一個(gè)命令串。例如,:map #o#!/bin/ksh產(chǎn)生一個(gè)新的命令模式指令,您輸入#時(shí),它被解釋為:o打開個(gè)新行,并添加文本#!/bin/ksh到文件中。為了在命令中包含回車和其他控制字符,可以在它們的前面用Ctrl+V命令
:ab abbreviation char-string 設(shè)置追加模式縮寫。例如,在命令模式中輸入:ab mv Milky Way Galaxy,則建立縮寫。如果在追加模式中輸入字符串mw,然后按Esc鍵,mw將被Milky Way Galaxy替代
在vi編輯器中向shell發(fā)出命令
:!ls 啟動(dòng)一個(gè)shell,并讓shell運(yùn)行l(wèi)s程序。在運(yùn)行完指定的程序后,必須按回車鍵以返回到編輯器中
:!ksh 啟動(dòng)一個(gè)shell,它允許運(yùn)行多個(gè)命令。退出shell可以回到編譯器中
:Or!speel% 對(duì)當(dāng)前文件(%)進(jìn)行拼寫檢查,并將spell的輸出詩(shī)篇到當(dāng)前文件中,從第1行(0行后面)開始放置這些輸出
:31r!command% 運(yùn)行UNIX命令(如cal或date)并將它的輸出讀入到當(dāng)前文件,從第31行開始放置這些輸出
Ctrl+Z 用于掛起當(dāng)前編輯會(huì)話進(jìn)程的csh和ksh命令,它允許您向父shell發(fā)出命令
fg 重新激活掛起的編輯進(jìn)程的csh和ksh命令
讀、寫和退出編輯器
:wq 保存編輯會(huì)話期間對(duì)文件所做的修改,退出編輯器返回到shell
:q 如果沒有對(duì)文件進(jìn)行修改或添加文件,可以用q退出對(duì)一個(gè)文件的編輯
:q! 退出對(duì)文件的編輯返回到shell模式,但是不保存在編輯會(huì)話期間對(duì)文件所做的修改
:w filename v將文件的緩沖區(qū)副本(修改版本)保存到一個(gè)新文件
[color=#DC143C][b]:#,# w newtest 例如,:1,6 w newtext命令創(chuàng)建一個(gè)名為newtext的文件,并將當(dāng)前文件的第1~6行文本復(fù)制到文件newtext中
:1,6 w >> oldfile 將當(dāng)前文件的第1~6行文本的一個(gè)副本追加到已有文件oldfile的末尾
:1,6 w! oldfile 用當(dāng)前文件的第1~6行文本覆蓋文件oldfile