溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

在UNIX下vi編輯器怎么用

發(fā)布時(shí)間:2021-10-15 10:35:32 來(lái)源:億速云 閱讀:137 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章主要為大家展示了“在UNIX下vi編輯器怎么用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“在UNIX下vi編輯器怎么用”這篇文章吧。

在UNIX下,vi是標(biāo)準(zhǔn)的文本編輯器之一。幾乎任何一部UNIX系統(tǒng)都把vi編輯器作為最最基本的“軟件”而被默認(rèn)組裝在系統(tǒng)中。在PC-UNIX中,即使是選擇最小程度安裝的系統(tǒng),vi編輯器也會(huì)被默認(rèn)安裝在系統(tǒng)中。

  提到vi,就不得不提一下UNIX下另一功能強(qiáng)大的編輯器 - Emacs 。好多人喜歡拿Emacs和vi來(lái)比較,但筆者認(rèn)為,Emacs 和 vi 沒(méi)有可比性。vi的輕量級(jí)特性,使得它成為系統(tǒng)管理方面的首選工具;而Emacs的功能強(qiáng)大的特性,使得它成為系統(tǒng)開發(fā)方面的首選工具。如果用Emacs 來(lái)做系統(tǒng)管理,它龐大的體積和對(duì)于系統(tǒng)資源的耗費(fèi)(相對(duì)于vi),勢(shì)必會(huì)影響系統(tǒng)管理的效率;然而,如果用vi來(lái)搞軟件開發(fā),它有些面向于開發(fā)的功能方面 的不完備,也勢(shì)必會(huì)影響開發(fā)的靈活性。在這里,我們的目標(biāo)是建立和管理一臺(tái)服務(wù)器,所以,我們選擇使用vi編輯器來(lái)完成服務(wù)器的配置工作。

由于本站所有服務(wù)器設(shè)置相關(guān)的修改工作,都是通過(guò)vi來(lái)完成的,所以準(zhǔn)備通過(guò)本站介紹的各種方法構(gòu)建服務(wù)器的話,請(qǐng)務(wù)必掌握vi的使用方法。否則將很難順利的進(jìn)行。如果您使用其它編輯器(比如Emacs)可以在安裝過(guò)程中或通過(guò)yum命令在線安裝。

用法

  習(xí)慣于Microsoft Windows下GUI方式編輯器的朋友,剛剛接觸vi肯定會(huì)有“排斥反應(yīng)”的,這一點(diǎn)只能奉勸稍安毋躁……當(dāng)你習(xí)慣于vi之后,你會(huì)發(fā)現(xiàn)它既精確又有秩序,而且重要的是它對(duì)于要編輯的對(duì)象極富針對(duì)性。

在UNIX下vi編輯器怎么用

  上圖為在CUI下輸入“vi”命令后,vi被啟動(dòng)的狀態(tài)。

  或者輸入一個(gè)已存在的文件的路徑,來(lái)打開一個(gè)已經(jīng)存在的文本文件。(這里以用root用戶登錄系統(tǒng),后輸入“vi /etc/X11/xorg.conf”為例。)

在UNIX下vi編輯器怎么用

  上圖為用vi打開/etc/X11/xorg.conf后的狀態(tài)。光標(biāo)位于左上第一個(gè)字符下滑線的位置。

  vi和其他編輯器最不一樣的地方莫過(guò)于它把編輯、處理等等的操作分離開來(lái),形成性質(zhì)不同的3種操作模式,他們分別為“命令模式”、“插入模式”、“ex模式”。

  在Windows下通常使用的記事本等等的編輯器在打開文件的時(shí)候,光標(biāo)已經(jīng)在處于輸入等待的狀態(tài),也就是說(shuō),我們打開文件時(shí)就可以對(duì)文件進(jìn)行編輯。 比如,我們要輸入新的文本,或者復(fù)制一段文本,所有操作的前提,只要編輯器是被打開的狀態(tài),操作就是可能的。

  但在vi下,為了增強(qiáng)對(duì)將要處理的文本的針對(duì)性,文本輸入、復(fù)制等等不同的操作,是被分離開來(lái)的,比如文本輸入的模式叫做“插入模式”,在插入模式 下,我們可以用和Windows下一樣的操作方法來(lái)對(duì)文本進(jìn)行輸入、編輯等等的操作,但是復(fù)制等等非編輯的操作,在插入模式下不能夠完成,而需要切換到相 應(yīng)的模式下用相應(yīng)的命令來(lái)完成。

在這里,還是首先對(duì)重要的vi的模式進(jìn)行說(shuō)明。

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

1)命令模式:

  在我們剛剛通過(guò)vi新建或打開一個(gè)已經(jīng)存在的文件時(shí),首先默認(rèn)被讀取的模式就是“命令模式”,命令模式的特征就是,在編輯器窗口左下角的位置上沒(méi)有任何的提示標(biāo)語(yǔ)。

在UNIX下vi編輯器怎么用

  在這個(gè)模式下,如果不通過(guò)相應(yīng)的命令,我們無(wú)法輸入新的文本到這個(gè)文件中。這里建議新接觸剛剛接觸vi的朋友在用vi打開一個(gè)文件時(shí)不要處于心切而亂 按鍵盤試圖輸入一些文本到文件中,因?yàn)槊钅J剿^的“命令”,并不是我們?cè)诿钚刑釙r(shí)下輸入的過(guò)程諸如“l(fā)s -> 回車”等等形式的命令。確切說(shuō)vi命令模式下的命令,只是計(jì)算機(jī)鍵盤上的某個(gè)按鍵或某些按鍵的組合,當(dāng)我們?cè)诿钅J较虑孟骆I盤一個(gè)按鍵的時(shí)候,相應(yīng)命令就已經(jīng)被執(zhí)行。


   在這里,首先介紹移動(dòng)光標(biāo)的命令。通常光標(biāo)的移動(dòng)可以通過(guò)鍵盤右邊的方向鍵,但是由于每次移動(dòng)光標(biāo),手都要大幅度的移動(dòng)到鍵盤右邊,這樣使用vi是體現(xiàn)不出效率的,所以建議使用vi固有的命令(鍵)來(lái)控制光標(biāo)的移動(dòng)。

  光標(biāo)的移動(dòng)命令如下所示:

  向右移動(dòng) --> l
  向左移動(dòng) --> h
  向下移動(dòng) --> j
  向上移動(dòng) --> k

  如上所示,例如要向右移動(dòng)光標(biāo)8個(gè)字符的距離,只要在鍵盤上敲 l 鍵8次即可;向下移動(dòng)3行的距離,只要在鍵盤上敲 j 鍵3次即可……也就是說(shuō),在vi命令模式中通過(guò)這幾個(gè)鍵(命令)來(lái)控制光標(biāo)的移動(dòng)。


  其次就是文本刪除的命令。在Windows下大多數(shù)編輯器在刪除文本時(shí)只要連續(xù)按[Backspace]鍵即可。但由于在vi中,插入模式和命令模式是分離開來(lái)的,所以在命令模式下需要通過(guò)命令(按鍵)來(lái)刪除文本,而不是直接按[Backspace]鍵。

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

  刪除光標(biāo)所在位置的字符 --> x
  刪除光標(biāo)所在的行 --> dd(敲 d 兩次)

  如上所示,例如要?jiǎng)h除從光標(biāo)位置起向右的3個(gè)字符,只要在鍵盤上敲 x 鍵3次即可;要?jiǎng)h除光標(biāo)所在的行,只要敲 dd (連續(xù)敲d鍵兩次),光標(biāo)所在行的所有字符以及行將會(huì)被刪除。


  再次,當(dāng)編輯完了一個(gè)文檔,想要保存后退出的時(shí)候的命令為“ZZ”(大寫、連續(xù)敲2次)。

  保存并退出文檔:

  保存當(dāng)前修改并退出 --> ZZ


  另外,vi還有一些編輯性質(zhì)的命令,一并總結(jié)如下

  具有編輯性質(zhì)的有用的命令:

  撤銷上一步操作 --> u
  移動(dòng)光標(biāo)到行首 --> 0 (數(shù)字0)
  移動(dòng)光標(biāo)到行末 --> $
  移動(dòng)光標(biāo)到當(dāng)前頁(yè)最頂行 --> H
  移動(dòng)光標(biāo)到當(dāng)前頁(yè)最底行 --> L
  向前翻一頁(yè)(Page Up) --> Ctrl + f
  向后翻一頁(yè)(Page Down) --> Ctrl + b


  還有在服務(wù)器配置中使用vi時(shí),頻繁用到的就是vi的搜索功能。在vi命令行的狀態(tài)下,鍵入“/”(斜 線)后,vi底部出現(xiàn)“/”,并處于輸入等待狀態(tài),這時(shí)候輸入要查找的文字或文字列,然后按回車就可以找到相應(yīng)的文字或文字列。當(dāng)有多個(gè)對(duì)象存在時(shí),敲 “n”(小寫)鍵為查找下一個(gè)目標(biāo),敲“N”為查找上一個(gè)目標(biāo)。

vi是所有UNIX系統(tǒng)都會(huì)提供的屏幕編輯器,它提供了一個(gè)視窗設(shè)備,通過(guò)它可以編輯文件。當(dāng)然,對(duì)UNIX系統(tǒng)略有所知的人,或多或少都覺(jué)得vi超級(jí)難用,但vi是最基本的編輯器,學(xué)好了vi,以后在UNIX世界里必將暢行無(wú)阻、游刃有余,因?yàn)槠渌麕追N文本處理器并非UNIX標(biāo)準(zhǔn)配備。若其它的Linux機(jī)器里沒(méi)有安裝joe或pico,如果不會(huì)使用vi,那可能就真的沒(méi)輒了。
 
vi編輯器有3種模式:命令模式、輸入模式、末行模式。掌握這三種模式十分重要:
 
命令模式:vi啟動(dòng)后默認(rèn)進(jìn)入的是命令模式,從這個(gè)模式使用命令可以切換到另外兩種模式,同時(shí)無(wú)論在任何模式下只要按一下[Esc]鍵都可以返回命令模式。在命令模式中輸入字母i或o或a,就可以進(jìn)入vi的輸入模式編輯文件。
 
輸入模式:在這個(gè)模式中我們可以編輯、修改、輸入等編輯工作,在編輯器最后一行顯示一個(gè)“--INSERT--”標(biāo)志著vi進(jìn)入了輸入模式。當(dāng)我們完成修改輸入等操作的時(shí)候我們需要保存文件,這時(shí)我們需要先返回命令模式,在進(jìn)入末行模式保存。
 
末行模式:在命令模式輸入“:”即可進(jìn)入該模式,在末行模式中有好多好用的命令。
 
下面介紹vi常用的命令操作
 
進(jìn)入輸入模式命令
 
i               在光標(biāo) 左側(cè)輸入正文[常用]
a              在光標(biāo) 右側(cè)輸入正文[常用]
o              小寫字符o, 在光標(biāo)所在行的 下一行增添新行
O              大寫字符O, 在光標(biāo)所在行的 上一行增添新行
I               在光標(biāo) 所在行的開頭輸入正文
A              在光標(biāo) 所在行的末尾輸入正文
上面介紹了幾種切換到插入模式的簡(jiǎn)單方法。另外還有一些命令,它們?cè)试S在進(jìn)入插入模式之前首先刪去一段
正文,從而實(shí)現(xiàn)正文的替換。這些命令包括:
s                 用輸入的正文替換光標(biāo)所指向的字符[常用]
ns              用輸入的正文替換光標(biāo)右側(cè)n 個(gè)字符
cw              用輸入的正文替換光標(biāo)右側(cè)的字  [常用]
ncw            用輸入的正文替換光標(biāo)右側(cè)的n 個(gè)字
cb              用輸入的正文替換光標(biāo)左側(cè)的字  [常用]
ncb            用輸入的正文替換光標(biāo)左側(cè)的 n 個(gè)字
cd              用輸入的正文替換光標(biāo)的所在行[常用]
ncd            用輸入的正文替換光標(biāo)下面的n 行
c$              用輸入的正文替換從光標(biāo)開始到本行末尾的所有字符[常用]
c0              用輸入的正文替換從本行開頭到光標(biāo)的所有字符[常用]
 
r            取代光標(biāo)所在處的字符, 比如c3 表示將光標(biāo)所在處的字符替換為字符3 [常用] 
 
R           取代字符直至按【ESC】為止
 
按【Esc】鍵或組合鍵【ctrl】+[ 退出輸入模式
 
末行模式
 
w              保存文件  [常用]
 
w file       將當(dāng)前文件的內(nèi)容保存到file文件
 
wq           保存文件并退出vi編輯器[常用]
 
wq file    將 當(dāng)前文件的內(nèi)容寫入file 文件,并保持原有文件的內(nèi)容不變,然后退出vi編輯器(假如當(dāng)前文件內(nèi)容有變動(dòng)但未執(zhí)行保存操作,那么執(zhí)行該命令后不會(huì)退出vi編輯器)
 
r file        讀取file 文件的內(nèi)容,插入當(dāng)前光標(biāo)所在行的后面
e file        關(guān)閉當(dāng)前文件,并打開新文件file (如果當(dāng)前文件內(nèi)容有變動(dòng)但未保存,則該命令不會(huì)被執(zhí)行)[常用]
f file        將當(dāng)前文件重命名為file [常用]
f               打印當(dāng)前文件名稱和狀態(tài),如文件的行數(shù)、光標(biāo)所在的行號(hào)等
 
q              退出vi編輯器(如果當(dāng)前文件有改動(dòng),則無(wú)法退出) [常用]
 
q!             強(qiáng)制退出vi編輯器(不保存修改)[常用]
 
#              將光標(biāo)移到第#行[常用]
 
PS:  關(guān)于行號(hào)使用的一些技巧:
 
一般用數(shù)值來(lái)指定絕對(duì)行號(hào);字符“.”表示光標(biāo)所在行的行號(hào);字符“$”表示文件最后一行的行號(hào),例如:
 
.+5                  將光標(biāo)從當(dāng)前行往下移動(dòng)5 行
 
$                     將光標(biāo)移到文件的最后一行
 
1                     將光標(biāo)移到文件的第一行
 
23w file         將文件的第23行寫入file文件
 
3,5w file       將第3 行至第5 行寫入file 文件
1,.w file        將第1 行至當(dāng)前行寫入file 文件
.,$w file        將當(dāng)前行至最后一行寫入file 文件
.,.+5w file    從當(dāng)前行開始將6 行內(nèi)容寫入file 文件
1,$w file      將所有內(nèi)容寫入file 文件,相當(dāng)于:w file 命令
 
移動(dòng)光標(biāo)的操作
 
【Home】          光標(biāo)到行首
【End】              光標(biāo)到行尾
【Page Up】       向上翻頁(yè)
 
【Page Down】  向下翻頁(yè)
 
【Delect】          刪除光標(biāo)位置的字符
【Ctrl】+ f          向前移動(dòng)一頁(yè)
 
【Ctrl】+ b        向后移動(dòng)一頁(yè)
 
  h            光標(biāo)向左移動(dòng)一個(gè)字符   [常用] 
  j            光標(biāo)向下移動(dòng)一個(gè)字符   [常用] 
  k           光標(biāo)向上移動(dòng)一個(gè)字符   [常用] 
  l            光標(biāo)向右移動(dòng)一個(gè)字符   [常用] 
  數(shù)字0    把光標(biāo)移到行尾  [ 常用] 
  $           把光標(biāo)移到行首  [ 常用]  
  G           把光標(biāo)移到文件的末尾  [ 常用] 
  gg          把光標(biāo)移到文件的開頭   [ 常用] 
  w           把光標(biāo)移到下一個(gè)單詞的開頭  [ 常用] 
  e           把光標(biāo)移到當(dāng)前或下一個(gè)單詞的字尾  [ 常用] 
  b           把光標(biāo)移到當(dāng)前或下一個(gè)單詞的開頭  [ 常用] 
  ^           把光標(biāo)移到該行的第一個(gè)非空白字符(tab,space)   [ 常用] 
  :#         把光標(biāo)移到該行的第#個(gè)位置,例如:3, :10   [ 常用] 
  )            光標(biāo)移到句尾
  (            光標(biāo)移到句首 
  注: 句子用半角句號(hào)后加一個(gè)空格(. )分割
  }           光標(biāo)移到段落結(jié)尾
  {           光標(biāo)移到段落開頭
  注: 段落以空行分割
  nG        將光標(biāo)定位到第n行的開頭  [ 常用]
 
  n+        將光標(biāo)下移n行  
 
 n-          將光標(biāo)上移n行
 
 n$          將光標(biāo)下移n行,并置于行尾
 
 H           將光標(biāo)置于當(dāng)前屏幕的頂行
 
 M          將光標(biāo)置于當(dāng)前屏幕的中間行
 
 L            將光標(biāo)置于屏幕的最后行 
 
 ~            改變當(dāng)前字符的大小寫   [ 常用]
 
 >>          把當(dāng)前行往右移動(dòng)8個(gè)字符(相當(dāng)于【tab】鍵)    [ 常用]
 
 <<          把當(dāng)前行往左移動(dòng)8個(gè)字符(相當(dāng)于【Shift】+【tab】) [ 常用]
 
nz:        將第n行滾至屏幕頂部,不指定n時(shí)將當(dāng)前行滾至屏幕頂部。
 
撤銷操作
 
u            命令撤銷最近一次的操作,可以使用多次來(lái)恢復(fù)原有的操作   [ 常用]
U           撤銷所有操作
.             可以恢復(fù)對(duì)使用u命令的操作      [ 常用]
 
復(fù)制/刪除/粘貼操作

x           刪除光標(biāo)處的單個(gè)字符,并把刪除后的字符放到緩存區(qū)( 實(shí)際上刪除相當(dāng)于剪切 )   [ 常用]
nx         刪除三個(gè)字符。 例如, 3x刪除光標(biāo)處向右的三個(gè)字符  
"bnx     把刪除的字符放到緩存區(qū)b
 
dw        刪除當(dāng)前字符到單詞尾(包括空格)的所有字符   [ 常用]
 
dd        刪除光標(biāo)所在行  [常用]     [ 常用]
ndd      刪除n行。 例如, 3dd從當(dāng)前行開始向下刪除三行文本  [ 常用]
 
"bndd   把刪除的內(nèi)容放到緩存區(qū)b
 
    PS: 如果要?jiǎng)h除第m至第n行的內(nèi)容,可以在末行模式中輸入m,nd。比如3,5d表示刪除第3~5行  [ 常用]
 
yy        復(fù)制當(dāng)前光標(biāo)所在行的內(nèi)容到vi緩沖區(qū)     [ 常用]
nyy      復(fù)制n行。例如:5yy就是從當(dāng)前光標(biāo)所處的行向下復(fù)制5行,把復(fù)制的內(nèi)容放到vi緩存區(qū)  [常用]
"bnyy   將復(fù)制的內(nèi)容放到緩存區(qū)b . 比如,b3yy 將三行數(shù)據(jù)存入緩存區(qū)b    [ 常用]
 
    PS: 如果要復(fù)制第m行到第n行之間的內(nèi)容,可以在末行模式中輸入m,ny例如:3,5y復(fù)制第三行到第五行內(nèi)容到緩存區(qū)  [ 常用]
 
yw       復(fù)制當(dāng)前光標(biāo)所在位置到單詞尾字符 (不包括空格) 的內(nèi)容到vi緩存區(qū),相當(dāng)于復(fù)制一個(gè)單詞  [常用] 
nyw     復(fù)制n個(gè)單詞例如:2yw就是復(fù)制兩個(gè)單詞 
"bnyw  例如, 復(fù)制n個(gè)單詞到緩存區(qū)b
 
y$        復(fù)制光標(biāo)所在位置到行尾內(nèi)容到緩存區(qū)   
y^        復(fù)制光標(biāo)所在位置到行首內(nèi)容到緩存區(qū)    
p          小寫p, 將緩存區(qū)的內(nèi)容粘貼到當(dāng)前行的下方(與yy配合)  ,或插入到當(dāng)前光標(biāo)的下一個(gè)位置(與dw, x, y$ , y^ 配合)[常用]
 
P          大寫P,與小寫p的作用類似,但粘貼都方向相反
 
查找與替換

        vi的查找與替換功能要再末行模式下完成。
 
/關(guān)鍵字                                               自上而下查找,比如/work,表示從當(dāng)前光標(biāo)處往下查找關(guān)鍵字為work的內(nèi)容[ 常用]
 
?關(guān)鍵字                                              自下而上查找 , 比如/work,表示從當(dāng)前光標(biāo)處往上查找關(guān)鍵字為work的內(nèi)容  [ 常用]
 
PS: 當(dāng)找到匹配項(xiàng)時(shí),光標(biāo)會(huì)定位在關(guān)鍵詞都字符開頭。要繼續(xù)查找下一個(gè)匹配項(xiàng),只需敲入字符n; 要往回查找,敲入N. 可以輸入2n往下查找下下一個(gè)匹配項(xiàng)
 
s/old_string/new_string               用new_string替換光標(biāo)所在行中首次出現(xiàn)的old_string
 
s/old_string/new_string/g           用new_string替換光標(biāo)所在行中的所有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    從當(dāng)前光標(biāo)處往下查找與pattern_address匹配的行,然后在該行上用new_string替換掉所有的old_string(實(shí)際上,這個(gè)命令是由/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的含義是不一樣的,前面的g表示對(duì)整個(gè)文本搜索與pattern_address匹配的行, 后面的g表示針對(duì)每一個(gè)與pattern_address匹配的行都用new_string替換掉old_string)
 
     如果pattern_address和old_string一樣,可以簡(jiǎn)寫為g/pattern_address/s//new_string
 
     可以在所有的命令尾加一個(gè)c命令,強(qiáng)制每個(gè)替換需要用戶進(jìn)行確認(rèn),例如:s/old/new/c 或s/old/new/gc   [ 常用] 
 
PS: 查找的一些技巧
 
/str/w file                                              正向搜索,并將第一個(gè)包含字符串str 的行寫入file 文件
/str1/,/str2/w file                              正向搜索,并將包含字符串str1 的行至包含字符串str2 的行寫入file 文件
 
恢復(fù)文件
vi在編輯某一個(gè)文件時(shí),會(huì)生成一個(gè)臨時(shí)文件,這個(gè)文件以. 開頭并以.swp結(jié)尾。正常退出該文件自動(dòng)刪除,如果意外退出例如忽然斷電,該文件不會(huì)刪除,我們?cè)谙麓尉庉嫊r(shí)可以選擇一下命令處理:
 
O        只讀打開,不改變文件內(nèi)容
E         繼續(xù)編輯文件,不恢復(fù).swp文件保存的內(nèi)容
R        將恢復(fù)上次編輯以后未保存文件內(nèi)容
Q        退出vi
D        刪除.swp文件
 
或者使用vi -r 文件名來(lái)恢復(fù)未保存的內(nèi)容

以上是“在UNIX下vi編輯器怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI