歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

vi 編輯器的用法

vi是所有UNIX系統都會提供的屏幕編輯器,它提供了一個視窗設備,通過它可以編輯文件。當然,對UNIX系統略有所知的人,或多或少都覺得vi超級難用,但vi是最基本的編輯器,學好了vi,以後在UNIX世界裡必將暢行無阻、游刃有余,因為其他幾種文本處理器並非UNIX標准配備。若其它的Linux機器裡沒有安裝joe或pico,如果不會使用vi,那可能就真的沒辄了。
 
          vi編輯器有3種模式:命令模式、輸入模式、末行模式。掌握這三種模式十分重要:
 
命令模式:vi啟動後默認進入的是命令模式,從這個模式使用命令可以切換到另外兩種模式,同時無論在任何模式下只要按一下[Esc]鍵都可以返回命令模式。在命令模式中輸入字母i或o或a,就可以進入vi的輸入模式編輯文件。
 
輸入模式:在這個模式中我們可以編輯、修改、輸入等編輯工作,在編輯器最後一行顯示一個“--INSERT--”標志著vi進入了輸入模式。當我們完成修改輸入等操作的時候我們需要保存文件,這時我們需要先返回命令模式,在進入末行模式保存。
 
末行模式:在命令模式輸入“:”即可進入該模式,在末行模式中有好多好用的命令。
 
    下面介紹vi常用的命令操作
 
進入輸入模式命令
 
i               在光標 左側輸入正文[常用]
a              在光標 右側輸入正文[常用]
o              小寫字符o, 在光標所在行的 下一行增添新行
O              大寫字符O, 在光標所在行的 上一行增添新行
I               在光標 所在行的開頭輸入正文
A              在光標 所在行的末尾輸入正文
上面介紹了幾種切換到插入模式的簡單方法。另外還有一些命令,它們允許在進入插入模式之前首先刪去一段
正文,從而實現正文的替換。這些命令包括:
s                 用輸入的正文替換光標所指向的字符[常用]
ns              用輸入的正文替換光標右側n 個字符
cw              用輸入的正文替換光標右側的字  [常用]
ncw            用輸入的正文替換光標右側的n 個字
cb              用輸入的正文替換光標左側的字  [常用]
ncb            用輸入的正文替換光標左側的 n 個字
cd              用輸入的正文替換光標的所在行[常用]
ncd            用輸入的正文替換光標下面的n 行
c$              用輸入的正文替換從光標開始到本行末尾的所有字符[常用]
c0              用輸入的正文替換從本行開頭到光標的所有字符[常用]
 
r            取代光標所在處的字符, 比如c3 表示將光標所在處的字符替換為字符3 [常用] 
 
R           取代字符直至按【ESC】為止
 
按【Esc】鍵或組合鍵【ctrl】+[ 退出輸入模式
 
末行模式
 
w              保存文件  [常用]
 
w file       將當前文件的內容保存到file文件
 
wq           保存文件並退出vi編輯器[常用]
 
wq file    將 當前文件的內容寫入file 文件,並保持原有文件的內容不變,然後退出vi編輯器(假如當前文件內容有變動但未執行保存操作,那麼執行該命令後不會退出vi編輯器)
 
r file        讀取file 文件的內容,插入當前光標所在行的後面
e file        關閉當前文件,並打開新文件file (如果當前文件內容有變動但未保存,則該命令不會被執行)[常用]
f file        將當前文件重命名為file [常用]
f               打印當前文件名稱和狀態,如文件的行數、光標所在的行號等
 
q              退出vi編輯器(如果當前文件有改動,則無法退出) [常用]
 
q!             強制退出vi編輯器(不保存修改)[常用]
 
#              將光標移到第#行[常用]
 
PS:  關於行號使用的一些技巧:
 
一般用數值來指定絕對行號;字符“.”表示光標所在行的行號;字符“$”表示文件最後一行的行號,例如:
 
.+5                  將光標從當前行往下移動5 行
 
$                     將光標移到文件的最後一行
 
1                     將光標移到文件的第一行
 
23w file         將文件的第23行寫入file文件
 
3,5w file       將第3 行至第5 行寫入file 文件
1,.w file        將第1 行至當前行寫入file 文件
.,$w file        將當前行至最後一行寫入file 文件
.,.+5w file    從當前行開始將6 行內容寫入file 文件
1,$w file      將所有內容寫入file 文件,相當於:w file 命令
 
 
 
移動光標的操作
 
【Home】          光標到行首
【End】              光標到行尾
【Page Up】       向上翻頁
 
【Page Down】  向下翻頁
 
【Delect】          刪除光標位置的字符
【Ctrl】+ f          向前移動一頁
 
【Ctrl】+ b        向後移動一頁
 
  h            光標向左移動一個字符   [常用] 
  j            光標向下移動一個字符   [常用] 
  k           光標向上移動一個字符   [常用] 
  l            光標向右移動一個字符   [常用] 
  數字0    把光標移到行尾  [ 常用] 
  $           把光標移到行首  [ 常用]  
  G           把光標移到文件的末尾  [ 常用] 
  gg          把光標移到文件的開頭   [ 常用] 
  w           把光標移到下一個單詞的開頭  [ 常用] 
  e           把光標移到當前或下一個單詞的字尾  [ 常用] 
  b           把光標移到當前或下一個單詞的開頭  [ 常用] 
  ^           把光標移到該行的第一個非空白字符(tab,space)   [ 常用] 
  :#         把光標移到該行的第#個位置,例如:3, :10   [ 常用] 
  )            光標移到句尾
  (            光標移到句首 
  注: 句子用半角句號後加一個空格(. )分割
  }           光標移到段落結尾
  {           光標移到段落開頭
  注: 段落以空行分割
  nG        將光標定位到第n行的開頭  [ 常用]
 
  n+        將光標下移n行  
 
 n-          將光標上移n行
 
 n$          將光標下移n行,並置於行尾
 
 H           將光標置於當前屏幕的頂行
 
 M          將光標置於當前屏幕的中間行
 
 L            將光標置於屏幕的最後行 
 
 ~            改變當前字符的大小寫   [ 常用]
 
 >>          把當前行往右移動8個字符(相當於【tab】鍵)    [ 常用]
 
 <<          把當前行往左移動8個字符(相當於【Shift】+【tab】) [ 常用]
 
nz:        將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部。
 
撤銷操作
 
u            命令撤銷最近一次的操作,可以使用多次來恢復原有的操作   [ 常用]
U           撤銷所有操作
.             可以恢復對使用u命令的操作      [ 常用]
 
復制/刪除/粘貼操作
x           刪除光標處的單個字符,並把刪除後的字符放到緩存區( 實際上刪除相當於剪切 )   [ 常用]
nx         刪除三個字符。 例如, 3x刪除光標處向右的三個字符  
"bnx     把刪除的字符放到緩存區b
 
dw        刪除當前字符到單詞尾(包括空格)的所有字符   [ 常用]
 
dd        刪除光標所在行  [常用]     [ 常用]
ndd      刪除n行。 例如, 3dd從當前行開始向下刪除三行文本  [ 常用]
 
"bndd   把刪除的內容放到緩存區b
 
    PS: 如果要刪除第m至第n行的內容,可以在末行模式中輸入m,nd。比如3,5d表示刪除第3~5行  [ 常用]
 
yy        復制當前光標所在行的內容到vi緩沖區     [ 常用]
nyy      復制n行。例如:5yy就是從當前光標所處的行向下復制5行,把復制的內容放到vi緩存區  [常用]
"bnyy   將復制的內容放到緩存區b . 比如,b3yy 將三行數據存入緩存區b    [ 常用]
 
    PS: 如果要復制第m行到第n行之間的內容,可以在末行模式中輸入m,ny例如:3,5y復制第三行到第五行內容到緩存區  [ 常用]
 
yw       復制當前光標所在位置到單詞尾字符 (不包括空格) 的內容到vi緩存區,相當於復制一個單詞  [常用] 
nyw     復制n個單詞例如:2yw就是復制兩個單詞 
"bnyw  例如, 復制n個單詞到緩存區b
 
y$        復制光標所在位置到行尾內容到緩存區   
y^        復制光標所在位置到行首內容到緩存區    
p          小寫p, 將緩存區的內容粘貼到當前行的下方(與yy配合)  ,或插入到當前光標的下一個位置(與dw, x, y$ , y^ 配合)[常用]
 
P          大寫P,與小寫p的作用類似,但粘貼都方向相反
 
查找與替換
        vi的查找與替換功能要再末行模式下完成。
 
/關鍵字                                               自上而下查找,比如/work,表示從當前光標處往下查找關鍵字為work的內容[ 常用]
 
?關鍵字                                              自下而上查找 , 比如/work,表示從當前光標處往上查找關鍵字為work的內容  [ 常用]
 
PS: 當找到匹配項時,光標會定位在關鍵詞都字符開頭。要繼續查找下一個匹配項,只需敲入字符n; 要往回查找,敲入N. 可以輸入2n往下查找下下一個匹配項
 
s/old_string/new_string               用new_string替換光標所在行中首次出現的old_string
 
s/old_string/new_string/g           用new_string替換光標所在行中的所有old_string
 
m,ns/old_string/new_string/g   用new_string替換第m行至第n行的所有old_string [ 常用]
 
%s/old_string/new_string/g      用new_string替換所有的old_string   [ 常用]
 
/pattern_address/s/old_string/new_string/g    從當前光標處往下查找與pattern_address匹配的行,然後在該行上用new_string替換掉所有的old_string(實際上,這個命令是由/pattern_address 和/s/old_string/new_string/g組合而成)
 
g/pattern_address/s/old_string/new_string/g    找出所有與pattern_address匹配的行, 並用new_string替換掉每一行所有的old_string( 注意: 前後兩個g的含義是不一樣的,前面的g表示對整個文本搜索與pattern_address匹配的行, 後面的g表示針對每一個與pattern_address匹配的行都用new_string替換掉old_string)
 
     如果pattern_address和old_string一樣,可以簡寫為g/pattern_address/s//new_string
 
     可以在所有的命令尾加一個c命令,強制每個替換需要用戶進行確認,例如:s/old/new/c 或s/old/new/gc   [ 常用] 
 
PS: 查找的一些技巧
 
/str/w file                                              正向搜索,並將第一個包含字符串str 的行寫入file 文件
/str1/,/str2/w file                              正向搜索,並將包含字符串str1 的行至包含字符串str2 的行寫入file 文件
 
恢復文件
vi在編輯某一個文件時,會生成一個臨時文件,這個文件以. 開頭並以.swp結尾。正常退出該文件自動刪除,如果意外退出例如忽然斷電,該文件不會刪除,我們在下次編輯時可以選擇一下命令處理:
 
O        只讀打開,不改變文件內容
E         繼續編輯文件,不恢復.swp文件保存的內容
R        將恢復上次編輯以後未保存文件內容
Q        退出vi
D        刪除.swp文件
 
或者使用vi -r 文件名來恢復未保存的內容

作者 愛國者的博客
Copyright © Linux教程網 All Rights Reserved