Linux下vi命令詳解

vi命令詳解 緩存

vi命令是unix下經常使用而重要命令,可在全屏幕方式下編輯一個或多個文件。若在vi執行時沒有指定一個文件,那麼vi命令會自動產生一個無名的空的工做文件。若指定的文件不存在,那麼就按指定的文件名建立一個新的文件。若對文件的修改不保存的話,v i命令並不改變原來文件的內容。 app

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

下面是vi命令使用的一些選項及含義: oop

  -c sub-command 在對指定的文件編輯前,先執行指定的命令 sub-command . 設計

  -r filename 恢復指定的文件filename . unix

  -R 將指定的文件以只讀的方式放入編輯器中,這樣不會保存對文件的任何修 改。 對象

  -y number 將編輯窗口的大小設爲number行。 ip

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

  命令模式 進入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 .

  !!從新執行上次的:! Command子命令。

  :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 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. Shen Pao-hsu … said: ‘If a general is not courageous he will be unableto conquer doubts or 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 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. 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. Shen Pao-hsu … said: ‘If a general is not courageous he will be unableto conquer doubts or to create great plans.’~~~~~~~~~~~~~~~~

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

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

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

大小寫的命令是有一些區別的。小寫字母通常以標點區分 「words.」,而大寫則忽略他們。
最重要的編輯程序

讓咱們看看最簡單也是最經常使用的編輯過程:

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

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

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

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

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

u–恢復 要後悔嗎?他不只僅撤消刪除,還撤消你全部的編輯工做。

.–重複 重複編輯工做。

相關文章
相關標籤/搜索