vi 編輯器的用法(超詳細的資料整理)

vi是全部UNIX系統都會提供的屏幕編輯器,它提供了一個視窗設備,經過它能夠編輯文件。固然,對UNIX系統略有所知的人,或多或少都以爲vi超級難用,但vi是最基本的編輯器,學好了vi,之後在UNIX世界裏必將暢行無阻、遊刃有餘,由於其餘幾種文本處理器並不是UNIX標準配備緩存

 

在UNIX下,vi是標準的文本編輯器之一。幾乎任何一部UNIX系統都把vi編輯器做爲最最基本的「軟件」而被默認組裝在系統中。在PC-UNIX中,即便是選擇最小程度安裝的系統,vi編輯器也會被默認安裝在系統中。

  提到vi,就不得不提一下UNIX下另外一功能強大的編輯器 - Emacs 。好多人喜歡拿Emacs和vi來比較,但筆者認爲,Emacs 和 vi 沒有可比性。vi的輕量級特性,使得它成爲系統管理方面的首選工具;而Emacs的功能強大的特性,使得它成爲系統開發方面的首選工具。若是用Emacs 來作系統管理,它龐大的體積和對於系統資源的耗費(相對於vi),勢必會影響系統管理的效率;然而,若是用vi來搞軟件開發,它有些面向於開發的功能方面 的不完備,也勢必會影響開發的靈活性。在這裏,咱們的目標是創建和管理一臺服務器,因此,咱們選擇使用vi編輯器來完成服務器的配置工做。 

因爲本站全部服務器設置相關的修改工做,都是經過vi來完成的,因此準備經過本站介紹的各類方法構建服務器的話,請務必掌握vi的使用方法。不然將很難順利的進行。若是您使用其它編輯器(好比Emacs)能夠在安裝過程當中或經過yum命令在線安裝。服務器

用法 

  習慣於Microsoft Windows下GUI方式編輯器的朋友,剛剛接觸vi確定會有「排斥反應」的,這一點只能奉勸稍安毋躁……當你習慣於vi以後,你會發現它既精確又有秩序,並且重要的是它對於要編輯的對象極富針對性。 

 

  上圖爲在CUI下輸入「vi」命令後,vi被啓動的狀態。

  或者輸入一個已存在的文件的路徑,來打開一個已經存在的文本文件。(這裏以用root用戶登陸系統,後輸入「vi /etc/X11/xorg.conf」爲例。)



  上圖爲用vi打開/etc/X11/xorg.conf後的狀態。光標位於左上第一個字符下滑線的位置。

  vi和其餘編輯器最不同的地方莫過於它把編輯、處理等等的操做分離開來,造成性質不一樣的3種操做模式,他們分別爲「命令模式」、「插入模式」、「ex模式」。

  在Windows下一般使用的記事本等等的編輯器在打開文件的時候,光標已經在處於輸入等待的狀態,也就是說,咱們打開文件時就能夠對文件進行編輯。 好比,咱們要輸入新的文本,或者複製一段文本,全部操做的前提,只要編輯器是被打開的狀態,操做就是可能的。

  但在vi下,爲了加強對將要處理的文本的針對性,文本輸入、複製等等不一樣的操做,是被分離開來的,好比文本輸入的模式叫作「插入模式」,在插入模式 下,咱們能夠用和Windows下同樣的操做方法來對文本進行輸入、編輯等等的操做,可是複製等等非編輯的操做,在插入模式下不可以完成,而須要切換到相 應的模式下用相應的命令來完成。

在這裏,仍是首先對重要的vi的模式進行說明。 

★ vi的模式(命令模式、插入模式、ex模式)

1)命令模式:

  在咱們剛剛經過vi新建或打開一個已經存在的文件時,首先默認被讀取的模式就是「命令模式」,命令模式的特徵就是,在編輯器窗口左下角的位置上沒有任何的提示標語。



  在這個模式下,若是不經過相應的命令,咱們沒法輸入新的文本到這個文件中。這裏建議新接觸剛剛接觸vi的朋友在用vi打開一個文件時不要處於心切而亂 按鍵盤試圖輸入一些文本到文件中,由於命令模式所謂的「命令」,並非咱們在命令行提時下輸入的過程諸如「ls -> 回車」等等形式的命令。確切說vi命令模式下的命令,只是計算機鍵盤上的某個按鍵或某些按鍵的組合,當咱們在命令模式下敲下鍵盤一個按鍵的時候,相應命令就已經被執行。


   在這裏,首先介紹移動光標的命令。一般光標的移動能夠經過鍵盤右邊的方向鍵,可是因爲每次移動光標,手都要大幅度的移動到鍵盤右邊,這樣使用vi是體現不出效率的,因此建議使用vi固有的命令(鍵)來控制光標的移動。

   光標的移動命令以下所示:

  向右移動 --> l
  向左移動 --> h 
  向下移動 --> j
  向上移動 --> k 
  如上所示,例如要向右移動光標8個字符的距離,只要在鍵盤上敲 l 鍵8次便可;向下移動3行的距離,只要在鍵盤上敲 j 鍵3次便可……也就是說,在vi命令模式中經過這幾個鍵(命令)來控制光標的移動。

  其次就是文本刪除的命令。在Windows下大多數編輯器在刪除文本時只要連續按[Backspace]鍵便可。但因爲在vi中,插入模式和命令模式是分離開來的,因此在命令模式下須要經過命令(按鍵)來刪除文本,而不是直接按[Backspace]鍵。

  文本刪除的命令以下所示:

  刪除光標所在位置的字符 --> x
  刪除光標所在的行 --> dd(敲 d 兩次) 
  如上所示,例如要刪除從光標位置起向右的3個字符,只要在鍵盤上敲 x 鍵3次便可;要刪除光標所在的行,只要敲 dd (連續敲d鍵兩次),光標所在行的全部字符以及行將會被刪除。

  再次,當編輯完了一個文檔,想要保存後退出的時候的命令爲「ZZ」(大寫、連續敲2次)。 

  保存並退出文檔:

  保存當前修改並退出 --> ZZ 

  另外,vi還有一些編輯性質的命令,一併總結以下

  具備編輯性質的有用的命令:

  撤銷上一步操做 --> u
  移動光標到行首 --> 0 (數字0)
  移動光標到行末 --> $
  移動光標到當前頁最頂行 --> H
  移動光標到當前頁最底行 --> L
  向前翻一頁(Page Up) --> Ctrl + f
  向後翻一頁(Page Down) --> Ctrl + b

  還有在服務器配置中使用vi時,頻繁用到的就是vi的搜索功能。在vi命令行的狀態下,鍵入「/」(斜 線)後,vi底部出現「/」,並處於輸入等待狀態,這時候輸入要查找的文字或文字列,而後按回車就能夠找到相應的文字或文字列。當有多個對象存在時,敲 「n」(小寫)鍵爲查找下一個目標,敲「N」爲查找上一個目標。

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        退出viD        刪除.swp文件 或者使用vi -r 文件名來恢復未保存的內容
相關文章
相關標籤/搜索