微生物基因體核心研究室

Microbial Genomics Core Laboratory, Graduate Institute of Genomics and Bioinformatics, NCHU, Taiwan

blog

vi

vi是一個古老(?)的文字編輯器,它廣泛被預設安裝在各種Linux與FreeBSD系統上(還有MacOS),可以直接透過CLI(command line interface)來操作。對於學習生物資訊的同學來說,你可能經常會需要透過SSH練線來編輯或修改一些用手稿語言寫成的文件。如果能熟悉vi的基本操作,對工作的效率會有很大的幫助。不過學習vi編輯器的使用,對於一向習慣使用視窗環境的初學者來說,會需要一些時間和耐性。以下整理了我在課堂上所講的相關內容:

操作時的三種模式

一般人因為在視窗環境下使用文字編輯器(譬如Word),可能已經習慣了透過滑鼠操作視窗選單,快速選單,各種快捷按鈕去編輯文件。然而當我們在CLI下編輯純文字文件的時候,上述那些選單裡面許多的功能,譬如一些格式設定,各種插入圖像表格的功能其實都是不需要或不存在的。想像你只有靠鍵盤在編輯純文字的話,你覺得一個文字編輯器應該具備哪些功能?這些功能如何讓使用者在鍵盤上達成呢?沒錯!你不可避免的需要用到一些快捷鍵。

用鍵盤輸入文字,最陽春的想法就是像打字機一樣的模式吧?但是電腦跟打字機不一樣,打字機都是一行一行從頭打到尾,在電腦的文字編輯過程中,我們通常可以靠游標的移動,選擇從文件不同的位置進行編輯。所以有些時候,鍵盤的功能不僅是要輸入本文的字元,而是要被拿來下編輯命令,譬如你可呢希望按下按鍵時,是移動游標、刪除游標上的文字、複製、貼上等等。有時候則是像打字機一樣純粹用鍵盤進行字元的輸入。而在第三種情境裡,你還會需要在鍵盤上它進行存檔、離開編輯器等操作。因此vi編輯器有三種主要的模式:命令模式(Command Mode)、插入模式(Insert Mode)、和所謂的最後一行模式(Last Line Mode)。

首先,你可以在CLI裡面打vi啟用vi文字編輯器,並且進入vi的畫面:

如果檔案不存在,vi會自己建立一個新的檔案

命令模式(Command Mode)

當 vi 啟動時,默認處於命令模式。在命令模式下,vi 將你輸入的任何字符解釋為命令,而不是文本。因此你在這個模式下看不到你在鍵盤上按下的東西。命令模式允許你在文件中進行移動游標、刪除、複製或粘貼文本等動作。

  • 進入命令模式按 Esc 鍵。從其它模式切換到命令模式都是這樣。簡單來說,如果你也不確定你當下是什麼模式,你先按Esc再下命令就對了。

以下是在命令模式裡的一些基本命令操作,請按Esc,進入命令模式,然後:

移動游標

  • 左移:按 h
  • 右移:按 l
  • 上移:按 k
  • 下移:按 j
  • 到當前這行的最前面:按 0
  • 到當前這行的最後面:按 $
  • 到文件的最後(最底下):按 G
  • 到文件的開頭(最上面):按 gg
  • 到下一頁:Ctrl + f
  • 到上一頁:Ctrl + b

刪除

  • 刪除當前字元:按 x
  • 刪除當前行:按 dd

搜尋文字

按 /,輸入要搜尋的文字,譬如 example,然後按 Enter。vi 會跳到下一個出現 example 的位置。

跳到下一個匹配項:按小寫 n,會跳到下一個匹配的 example。
跳到上一個匹配項:按大寫 N,會跳到上一個匹配的 example。

注意:在 vi 編輯器中搜尋包含特殊字元的內容時,需要對這些特殊字元前面加上 \,讓 vi 知道你是要搜尋這些字元本身,而不是它們的特殊含義。譬如說 /,請打\/,而 ?變成\?,*變成\*,+變成\* 等等。常見的情況例如你要搜尋文件裡面的 /opt/anaconda3/bin/python3 ,你就要在命令模式下(Esc),輸入 /\/opt\/anaconda3\/bin\/python3 然後按下Enter搜尋喔!

複製和粘貼

  • 複製當前行:按 yy
  • 粘貼:按 p

全部取代

將文本中的每一個apples都換成bananas

:%s/apples/bananas/g

當我們把檔案在不同的作業系統之間傳送的時候,偶爾會錯誤地出現一堆所謂換行符號。當你在 Unix 系統中打開一個從 DOS/Windows 系統傳來的文件時,可能會看到每行結尾處有一個額外的 ^M 符號(所謂的carriage-return character),這是因為來自DOS/Windows的文件用所謂的CRLF來標註每一行的結尾,它的樣子像\r\n, 在Unix 系統下這些符號會被顯示為一個看起來像是 ^M 的符號 (它是一個符號不是兩個)。有一些老的Perl手稿上傳到Linux裡面不能用,常常是這種原因。這樣的問題其實只要把這些符號去除就可以完全解決了。用vi開啟編輯這樣的檔案,你會看到在每一行的盡頭都出現了一個像是^M的符號。以下是在vi中去除掉所有^M的方法。附帶一提,這個^M符號輸入的方法是按下 (Ctrl+v+m)

:%s/^M//g

插入模式(Insert Mode)

進入插入模式:在命令模式下,按 i 進入插入模式 (或者按a,差別是會把輸入的內容append在游標後面一個位置)。

在插入模式下,你用鍵盤輸入的所有字元都會被視為文本被插入在游標的位置上。簡單來說這就是打字模式!

你可以隨時按 Esc 鍵離開插入模式,進入命令模式。

最後一行模式(Last Line Mode, Escape Mode)

從命令模式下,按冒號 (:) 就可以進入最後一行模式,做存檔、離開等動作。按下Enter則會回到Command Mode。當你在插入模式下要進入最後一行模式,你會需要先按Esc (到命令模式),然後按下冒號 (:) (從命令模式進入到最後一行模式)

退出 vi

  • 存檔並退出:: (冒號鍵) + wq + Enter
  • 直接退出(不存檔):: (冒號鍵) + q! + Enter