FreeBSD 中 vi 的指令用法

vi:

vi 有三種狀態,分別是命令模式 ( Command mode )插入模式 ( Insert mode )、和底線模式 ( Last line )。各模式的功能區分如下:

  • Command mode:此模式在於控制游標移動、刪除字元或搬移某個區塊。
  • Insert mode:只有在此模式下,才可以輸入文字。
  • Last line mode:此模式在於儲存檔案、離開 vi、找尋字串、列出行號和求助等等。

你可以鍵入 vi  <filename>或 v i來進入 vi 編輯器。不同的是 vi  <filename> 會以 filename 做為文件的預設檔名。如果 filename 存在時,則直接編輯此檔。而直接鍵入 vi 時則不會預設文件檔的檔名,也不會開啟已存在的檔案。一開始進入 vi 時是在 Command mode 下。你可以從 Command mode 轉為 Insert mode,或從 Command mode 轉為 Last line mode。注意,要開始輸入文字一定要進入 Insert mode。以下說明如何在各種模式中轉換。

  1. Command mode -> Insert mode
    在 Command mode 下按 i、a 或 o 都可以進入 Insert mode,並且可以開始輸入字元資料。這三種輸入文字的方式不太一樣:


    •  i :插入,從目前游標所在之處插入所輸入之文字。
    • a :增加,從目前游標所在的下一個字開始輸入文字。
    • o :插入新的一行,並從行首開始輸入文字。


  2. Insert mode -> Command mode
    只要在 Insert mode 下按 [ESC] 即可回 Command mode。
  3. Command mode -> Last line mode
    當在 Command mode 下按 : 、 / 或 ? 都可進入 Last line mode。這時你所鍵入的指令都會出現在最下面一行。這三種進入方式分別代表三種功能:
    • ::按 : 後,你可以接著鍵一些特殊的指令如存檔、離開...等等。
    • /:鍵入 / 以後,你可以輸入你所要找尋的字串。vi 會從文件開頭往上往下找尋符合的字串
    • ?:鍵入 ? 以後,你可以輸入你所要找尋的字串。vi 會從文件尾端由下往上找尋符合的字串
    • :e filename:編輯另一個檔 filename,如果放棄當前改變,使用 ! 強制
    • :% s/string1/string2/g 在整個文章範圍內尋找 string1,用 string2 取代

前面我們提到過,當你啟動vi以後,會在 Command mode 下。如果你要鍵入文字時,你必須轉到 Insert mode。這時若你又想刪除文字,你會發現按倒退鍵居然沒有作用。原來 vi 必須轉換到 Command mode 下刪除文字。等你文件打完想存檔的時候,你又會發現在 Command mode 下居然沒有存檔的指令。原來存檔的指令是在 Last line mode 下。所以底下我們將介紹 Command mode 和 Last line mode 下幾個比較常用的功能:

Command mode
  1. 移動游標:

    • 除了上、下、左、右鍵可以移動游標外,小寫英文字母 h、j、k、l 也可以用來移動游標。h、j、k、l 分別代表 左、下、上、右。
    • 按 [ctrl + b]:螢幕往後移動一頁。
    • 按 [ctrl + f ]:螢幕往前移動一頁。
    • 按 [ctrl + u]:螢幕往後移動半頁。
    • 按 [ctrl + d]:螢幕往前移動半頁。
    • 按 G:移動到文章的最後一行。
    • 按1G:移動到文章的第一行
    • 按 w:游標移到下個 word 的開頭。
    • 按 e:游標移到下個 word 的字尾。
    • 按 b:游標回到上個 word 的開頭。
    • 按 0:游標移動到所在行的開頭
    • 按 $:游標移到所在行的最後一個字元。
    • 按 ^:移到該行第一個非空白字元。
    • 按 n:重複上次搜尋動作。
    • 按 #|:移到該行的第 # 個字元,# 為一個數字。如 5| 表示移動游標到第五個字元。

  2. 刪除文字:
    • x    :每按一次就刪除游標所在位置的後面一個字元。
    • #x  :刪除游標所在位置的後面 # 個字元,如 6x。
    • X   :每按一次就刪除游標所在位置的前面一個字元。
    • #X :刪除游標所在位置的前面 # 個字元,如 20X。
    • dd  :刪除一整行,此行位於游標所在位置。
    • #dd:往下刪除 # 行文字。
  3. 複製
    • yw :將游標所在之處到字尾的字元複製到緩衝區中。
    • yy  :複製游標所在之行。
    • #yy:拷貝目前游標往下數 # 行的文字。
    • p   :將緩衝區內的字元貼到游標所在位置。
  4. 取代
    • r :取代游標所在處之字元。
    • R:取代字元直到按 [ESC] 為止。
  5. 復原上一個指令
    • u:若你不小心操作錯誤,可以按 u 來回復資料。
  6. 更改
    • cw:更改游標所在處的字到字尾 $ 處。
    • c#w:如 c3w 代表更改三個字。
  7. 跳至指定之行
    • [ctrl+g]:列出游標所在之行的行號。
    • #G:跳至第 # 行。

 Last line mode
進入 Last line mode 之前,一定要先進入 Command mode 才行。然後按 :、/、? 都可以進入 Last line mode。前面已經講過按 / 和 ? 都是在做搜尋字串之用,所以我們現在只介紹按 : 後所能輸入的功能。記得輸入這些命令之前一定要在 Command mode 下按 :。
  1. 列出行號

    • set nu:鍵入這個命令以後會在文章的每一行前面列出行號。

  2. 跳到文章的某一行

    • #:井號代表一個數字。比如你輸入 15 並按 Enter 以後,游標就會跳到第 15 行。

  3. 存檔

    • w:若你已經有預設文件檔的檔名,則下這個指令可以將你編輯過的檔案存起來。
    • w  filename:下這個指令可以把你編輯過的文件存在 <filename> 這個檔案之中。
    • #,#  w  filename:# 是指數字,如 20,30  w  test.txt。這個意思是說把 20 行到 30 行的資料存到 test.txt 檔案中。

  4. 離開

    • q:離開 vi
    • q!:強制離開 vi。有時候按 q 不能離開 vi 的話就可以鍵入這個指令強制離開。
    • wq:存檔並離開。
    • x :存檔並離開,相當於:wq

  5. 求助
    • help:vi 的指令真的是又多又繁雜,所以要背住所有的指令簡直是不可能的事。所以如果你想查詢某個指令的功能時,鍵入 help 就可以達到這個功能。這是鍵入 help 以後所出現的畫面。請看下面那幾行。第一行是說如果你要查詢 vi 的命令,請鍵入 :viusage。所以你只好再乖乖鍵入一次指令,它就會出現 vi 命令的列表了。第二行說明如果要看 ex 命令的話,請鍵入 :exusage。

1 則留言:

  1. 匿名2/02/2022

    Lucky Club Casino Site | Lucky Club Casino Online
    Lucky Club Casino is operated by the Lucky Club Casino. The casino is luckyclub one of the biggest names in the casino world. You can play at this casino,

    回覆刪除