首頁  >  文章  >  php教程  >  linux下vi指令詳解

linux下vi指令詳解

高洛峰
高洛峰原創
2016-12-12 16:29:131212瀏覽

vi指令詳解

vi指令是unix下常用且重要指令,可在全螢幕方式下編輯一個或多個檔案。若在vi執行時沒有指定一個文件,那麼vi指令會自動產生一個無名的空的工作文件。若指定的檔案不存在,那麼就依照指定的檔案名稱建立一個新的檔案。若對文件的修改不保存的話,v i指令不會改變原來文件的內容。

  注意:vi命令並不鎖住所編輯的文件,因此多個用戶可能在同時編輯一個文件,那麼最後保存的文件版本將被保留。

  -c sub-command 在對指定的檔案編輯前,先執行指定的指令sub-command .

  -r filename 恢復指定的檔案filename . -R 將指定的檔案以唯讀的方式放入編輯器中,這樣不會儲存任何檔案的修改。

  -y number 將編輯視窗的大小設為number行。

  以下是vi編輯所處的三種模式:

  命令模式 進入vi時所處的模式。在此模式下使用者可輸入各種子指令對進行*作,如刪除行、貼上行、移向下一個字、移向不同行等。

  文字輸入模式 在此模式下可以修改一行的內容並增加新行。在指令模式下鍵入a 、i 或c鍵可進入文字輸入模式,按Escape鍵可返回指令模式。

  指令項目模式 在此模式下,可以透過子指令輸入更多的參數。如:w子指令要求輸入一檔名,”/”子指令要求輸入一個查找項。使用者使用Escape鍵返回指令模式。

下面是自命令模式下執行的,在同一行上移動的自命令

  h 將遊標左移一格。

  l 將遊標右移一格。

  j 將遊標下移一格。

  k 將遊標上移一格。

  w 將遊標移到下一個小字的前面。

  W 將遊標移到下一個大字的前面。

  b 將遊標移到前一個小字的前面。

  B 將遊標移到前一個大字的前面。

  e 將遊標移到下一個小字的後面。

  E 將遊標移到前一個大字的後面。

  fc 把遊標移到同一行的下一個c字符處。

  Fc 把遊標移到同一行的前一個c字符處。

  tc 把遊標移到同一行的下一個字元c的前一格。

  Tc 把遊標移到同一行的前一個字元c的後一格。

  number| 把遊標移到遞number列上。

下面是命令模式下在行間移動的子命令

  +或Enter 把遊標移至下一行第一個非空白字元。

  - 把遊標移至上一行第一個非空白字元。

  0 把遊標移到目前行的第一個字元。

  $ 把遊標移到目前行的最後一個字元。

  H 把遊標移到螢幕最頂端一行。

  L 把遊標移到螢幕最底端一行。

  M 把遊標移到螢幕中間。

下面是命令模式下改變螢幕顯示的子命令

  z- 把目前行作為螢幕的最後一行,並重新顯示螢幕。

  z. 把目前行當作螢幕的中間一行,並重新顯示螢幕。

  Ctrl+l 重新顯示螢幕目前內容。

  /pattern/z- 找出pattern的下一個位置,並把所在行設為螢幕的最後一行。

下面是在命令模式中用來顯示頁面的子命令

  Ctrl + f向後滾一頁。

  Ctrl + d向後滾半頁。

  Ctrl + b向前滾一頁。

  Ctrl + u向前滾半頁。

  Ctrl + e螢幕向下滾一行。

  Ctrl + y螢幕項目上滾一行。

下面是在命令模式下用來查找字串所使用的子命令

  /pattern 向後尋找指定的pattern ,若遇到文件尾,則從頭再開始。

  ? pattern 向前尋找指定的pattern ,若遇到文件頭,則從尾再開始。

  n 在上次指定的方向上,再次執行上次定義的查找。

  N 在上次指定的方向的相反方向上,再次執行上次定義的查找。

  /pattern/+number 將遊標停在包含pattern的行後面第number行上。

  /pattern/-number 將遊標停在包含pattern的行前面第number行上。

  % 移到匹配的」()」或”{}”上。

下面是在文字輸入模式下用來輸入文字的子命令(使用者可在任何時候按Escape返回到指令模式):

  a 在遊標之後開始輸入文字。

  A在行尾開始輸入文字。

  i在遊標之前開始輸入文字。

  I在行首第一個非空白字元前輸入文字。

  o在遊標所在行後插入一空白行。

  O在遊標所在行前插入一空白行。

下面是在指令模式下改變文字所使用的子指令(使用者可在任何的時候按Escape鍵返回指令模式):

  cc或S 修改一整行。

  C 改變一行遊標位置以後的部分。

  cw 改變遊標所在單字。

  dd刪除目前行。

  D 刪除遊標所在行遊標後面的內容。

  dw刪除遊標所在的單字。

  J 把下一行內容加到本行尾。

  rc把光符所在字元替換成c .

  R 覆寫本行內容。

  u恢復上一次的修改。

  x刪除遊標所在的字元。

  ~ 改變遊標所在出字元的大小寫。

  . 重複上一個*作。

  

  >>把目前行移到右邊。

下面是用於文件中拷貝文字的字命令

  p 將緩衝區內容取到遊標所在行的下面一行。

  P 將緩衝區內容取到遊標所在行的上面一行。

  」bd 將文字刪除至有名緩衝區b .

  」bp 張貼有名緩衝區b內容。

  yy把目前行放入緩衝區。

  Y 把目前行放入緩衝區。

  Yw把遊標所在的單字放入緩衝區。

下面是用來保存檔案的子指令

  :w 回寫修改後的檔案。

  :w filename 當filename不存在時,把修改後的檔案存為檔案filename ,當檔案filename存在時,報錯。

  !w filename 如果檔案filename存在時,把修改後的檔案儲存為檔案filename .

下面列出了在vi編輯的多個檔案之間切換所用的子指令

  :n開始編輯vi啟動的文件列表中的下一個文件。

  :n filenames 指定將被編輯的新的檔案清單。

下面列出了用於在當前文件和另外一個文件間切換的子命令:

  :e filename 使用filename激活vi (在vi中裝入另一個文件filename)。

  e!重新裝入目前文件,若當前文件有改動,則丟棄先前的改動。

  :e+filename 使用filename啟動vi ,並從檔案尾端開始編輯。

  :e+number filename 使用filename啟動vi ,並在第number行開始編輯。

  :e# 開始編輯另外一個文件。

下面是在本文件中加入其他文件代碼所使用的子命令:

  :r filename讀取filename文件,並將其內容加到目前文件後。

  :r ! command執行command文件,並將其輸出加到目前文件後。

下面是vi中其他的子命令

  ctrl+g 取得正在編輯文件的有關資訊。

  :sh啟動sh ,從sh中返回可用exit或ctrl+d .

  :! Command 執行命令command .

  !!重新執行上次的命令:! CommandCommand。

  :q退出vi ,若使用者對編輯的檔案有所修改,系統不會讓使用者使用q指令退出。

  :q!退出vi而不管是否對文件有改動。

  ZZ或:wq 儲存對檔案的修改並退出vi .

  使用者可在一個特殊的檔案.exrc中定義特殊的vi指令。在vi中使用這些指令時,必須在該
指令前加上一個冒號( :) 。

——————————————————-

vi 的模式

vi 是在很久以前就寫的程式。在那個時候,鍵盤上沒有現在熟悉的那麼多功能鍵。所以,vi 設計成透過輸入字元和 ESC 來控制輸入和修改文字。

可能這對某些人來說是個遺憾,但是你會發現你不需要改變手在鍵盤上的位置就可以完成所有的功能。結果是你的輸入將快速起來。

為了完成互動的全螢幕編輯工作, vi 有三種模式。插入模式 (insert) 用於輸入文字。在插入模式下,你輸入的任何字元都會顯示在螢幕並存於檔案。命令 (command) 模式用於大多數編輯功能。在命令模式下,所有的輸入都將產生一定的回應而不是直接到文字中,例如移動遊標、刪除一塊文字、拷貝文字等。第三個模式是執行另 外的功能,例如查找、全域替換、處理多個檔案等。這種模式是基於 ex 編輯器的。
啟動 vi

當 vi 啟動後,預設的模式是指令模式。按照下面的步驟試試看:輸入程式名稱啟動vi :

$ vi

你將看到類似下面的東西:

~~~~~~~~~~~~~~~~~~~ ~~~~~~Empty buffer

i–插入

現在我們輸入「i」 進入插入模式。字元 “i” 將不會回顯。此後你輸入的任何東西都會顯示在快取中。現在我們來輸入一段文字。 例子中的話來自英文版的孫子兵法。注意遊標的位置在例子中是個底線 線。

If wise, a commander is able to recognize changing circumstances and toact expediently. If sincere, his men will have no doubt of the certainty ofrewards and punishments。 If courageous, he gains victory byseizing opportunity without hesitation. If strict, his troops are disciplinedbecause they are in awe of him and are afraid of punishment. Shen Pao-hsu … said: 'If a general is not courageous he will be unableto conquer doubts或 to create great plans.'~~~~~~~~~~~~~~~~

Esc–Cancel

當你輸入完了,按下Esc 鍵返回到命令模式。 (如果你已經處於指令模式下,按 Esc 時會聽到喇叭的聲音。) Esc 可以撤銷未完成的指令和終止插入模式。按 Esc 後,遊標將停留在你最後輸入的字元的下方。

很不幸,沒有一個明顯的標誌表明你現在處於什麼模式下。但是有簡單的方 法來告訴你現在你所處的模式。如果你按下鍵,對應的字元出現在螢幕上,那麼 你是在插入模式下,否則是在命令模式下。如果你不能確定你現在所處的模式,那麼 按 Esc 兩次以聽到喇叭聲來確信你在命令模式下。
行動遊標和簡單的編輯

是看一看基本的行動遊標指令的時候了。訓練訓練你的手指,讓他們以後自動的執行你所想的指令。
最重要的移動指令

讓我們來看看有多少影響遊標移動的指令。
hh–遊標左移

首先,按 5 下 h 讓遊標左移動 5 個 (如果你看到 h 跑到屏幕上了的話,一定是你忘了按 Esc )。遊標現在應該在「plans」 中的「p」 下面(看下面的例子):

If wise, a commander is able to recognize changing circumstances and toact expediently. If sincere, his men will have no doubt of the certain and punish。 unishment . Shen Pao-hsu … said: 'If a general is not courageous he will be unableto conquer doubts or to create great plans.'~~~~~~~~~~~~~~~

kk–光標上移

現在我們來按5 次k 讓遊標上移5 行。也許你該認為應該要有快捷方式了。好,現在就有個簡單的方法:在你要採取的 行動前加上數字。按下 5k 你可以和按 5 下 k 有相同的結 果了。遊標現在該在 “he” 的”e”下了。

If wise, a commander is able to recognize changing circumstances and toact expediently. If sincere, his men will have no doubt of the certainty ofrewards and punishments. If humane, he loves mankind, sympathizes with others,and appreciates their industry and toil . If courageous, he gains victory byseizing opportunity without hesitation. If strict, his troops are disciplinedbecause they are in awe of him and are afraid of punishment。 doubts or to create great plans.'~~~~~~~~~~~~~~~~

在使用這些功能的時候有些限制的。例如使用 h 或 l 移動遊標超過了一行文字的頭或尾,遊標將停留在頭或尾部,喇叭鳴叫提醒 你。

還有其他的類似 h 和 k 的嗎?看一看表3.2。最好的熟悉他們 的方法是多用他們。
表3.2. 常見的方向鍵

指令移動
h 左一個字元
j 下一行
k 上一行
l 右一個字元
w, W 前一個單字(W 忽略標點)
b, B 後一個標點, B B 忽略標點)
$ 到行尾
^ 到行首第一個非空字符
0 行首
G 到緩衝首
nG 到第n 行

大小寫的命令是有一些區別的。小寫字母一般以標點區分 “words.”,而大寫則忽略他們。
最重要的編輯程式

讓我們來看看最簡單、最常用的編輯過程:

修改 沒有人不犯錯。所以遲早你會碰到修改你輸入的文字的時候。實際上花在字處理上的大多數時間是修改而不是輸入新的東西。因此,你要知道如何方便修改就很重要。

x–刪除一個字元 刪除文字的最簡單的方式是用 x。這個指令的結果是遊標所處 的字元的消失,後面的文字左移動。如果你刪除的字符是一行最後的一個字符, 那麼遊標將向左移動一個,這樣遊標就不會停留在不存在的字符的下面了。假如 沒有任何文字了,喇叭就叫。

d–刪除物件 這個指令的右邊還要有一定的文字物件。文字物件就是一塊文字。他右邊接的就是在控制遊標移動的那些字元。例如 w 表示向前一個單詞,那麼 dw 將刪除下一個單字。 5w 表示前進 5 個單詞,那麼 d5w 將刪除他們。

dd–刪除一行 最常用的 d 系列指令之一。和前面一樣, 5dd 將刪除 5 行

D–整個刪除 大寫形式的 D 用來刪除從遊標到行尾。和 d$ 一樣效果。

u–恢復 要後悔嗎?他不僅撤銷刪除,還撤銷你所有的編輯工作。

.–重複 重複編輯工作。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn